Di recente ho letto il post sul blog di Three Big Lies e sto facendo fatica a giustificare la seconda bugia, che è citata qui:
(LIE # 2) IL CODICE DOVREBBE ESSERE PROGETTATO INTORNO A UN MODELLO DEL MONDO
Non c'è valore nel codice come una sorta di modello o mappa di un mondo immaginario. Non so perché questo sia così avvincente per alcuni programmatori, ma è estremamente popolare. Se c'è un razzo nel gioco, sii certo che esiste una classe "Razzo" (Supponendo che il codice sia C ++) che contenga dati per esattamente un razzo e faccia cose rozze. Indipendentemente da ciò che la trasformazione dei dati viene realmente eseguita o dal layout dei dati. O del resto, senza la comprensione di base che dove c'è una cosa, probabilmente ce n'è più di una.
Sebbene ci siano molte penalità in termini di prestazioni per questo tipo di design, il più significativo è che non si ridimensiona. Affatto. Cento razzi costano cento volte tanto quanto un razzo. Ed è estremamente probabile che costi anche di più! Anche per un non programmatore, questo non dovrebbe avere alcun senso. Economia di scala. Se hai più di qualcosa, dovrebbe diventare più economico, non più costoso. E il modo per farlo è progettare correttamente i dati e raggruppare le cose con trasformazioni simili.
Ecco i miei problemi con questa bugia in particolare.
C'è valore nel codice come modello / mappa di un mondo immaginario poiché la modellazione del mondo immaginario aiuta (almeno io, personalmente) a visualizzare e organizzare il codice.
Avere una classe "Rocket" è, per me, una scelta perfettamente valida per una classe. Forse i "Razzi" potrebbero essere suddivisi in tipi di Razzi come AGM-114 Hellfire, ecc. Che conterrebbero forza di carico utile, velocità massima, raggio di sterzata massimo, tipo di bersaglio e così via, ma comunque ogni razzo lanciato dovrebbe avere una posizione e una velocità.
Naturalmente avere 100 missili costa più di 1 missile. Se ci sono 100 missili sullo schermo, ci devono essere 100 diversi calcoli per aggiornare la loro posizione. Il secondo paragrafo sembra sostenere che se ci sono 100 missili, dovrebbe costare meno di 100 calcoli per aggiornare lo stato?
Il mio problema qui è che l'autore presenta un modello di programmazione "imperfetto" ma non presenta un modo per "correggerlo". Forse sto inciampando sull'analogia della classe Rocket, ma mi piacerebbe davvero capire il ragionamento alla base di questa bugia. Qual è l'alternativa?