Rendi il tuo sistema piatto anziché profondo: oggetti grandi che non parlano affatto, non un carico di adolescenti che parlano tra loro. Un tipo di dati può spesso essere modificato in un punto centrale in modo loopy, come PhysicsSystem
.
Non è necessario disperdere quella logica in 50 diverse classi che devono parlare tra loro e mutare il proprio piccolo stato localizzato. Fare ciò porterà ognuno a essere individualmente più semplice, ma ragionare su ciò che fa in termini di fisica sarà, nel complesso, molto più complesso a causa della ragnatela delle interazioni che introduce. Basta fermarsi a pensare di rompere quel sistema fisico in 50 diverse classi e interfacce astratte, anche se individualmente semplici. Pensa a ciò che realmente fa alla tua capacità di comprendere ciò che farà il motore della fisica, e renditi conto di quanto ritardato possiamo essere con OOP, rendendo le cose esponenzialmente più complesse nel loro insieme per rendere semplice ogni individuo.
Guarda come i motori di gioco lo fanno. Hanno l'idea giusta.
La nozione di un'entità Car
contribuisce a malapena a qualsiasi complessità del sistema, in quanto si tratta semplicemente di una raccolta di componenti e non fornisce alcuna funzionalità al sistema. E i componenti contribuiscono a malapena a qualsiasi complessità del sistema, dal momento che sono solo dati. Il sistema si scompone in una semplice linea piatta di sistemi pesanti, in gran parte indipendenti, che contengono la funzionalità, non una profonda ragnatela di interazioni tra interfacce astratte che rappresentano le idee più granulari lontane dalle esigenze del business. Non solo ridurrà sostanzialmente il codice richiesto per il software, ma renderà anche più facile suddividere il suo design in una manciata di sistemi di cui hai bisogno mentre ti consentirà di parlare con i manager e i clienti dell'organizzazione del sistema (che è letteralmente solo il organizzazione di questi sistemi) in un modo che possono effettivamente comprendere in misura molto maggiore, come PhysicsSystem
, RenderSystem
, ecc.
Ed è l'AF estensibile e manutenibile, che ti consente di affrontare idee di design inattese del tutto nuove che spezzerebbero le astrazioni più attentamente progettate, richiedendo comunque solo la modifica di un punto nel codice senza modifiche a cascata.