J'essaie d'apprendre à produire du code orienté objet de qualité et j'étudie des concepts comme Solid. Je travaille actuellement sur un système de processus d'entité-composant pour un petit moteur de jeu.
Actuellement, je l'ai mis en œuvre en tant que tel:
ScreenStack
qui contient une pile de Screen
sScreen
a un EntityManager
et ProcessManager
.ProcessManager
met à jour tous les entités Process
es à partir du EntityManager
.Process
gère toutes les logiques de jeu, il doit donc pouvoir utiliser ScreenStack
pour éventuellement pousser des écrans POP et POP. Il peut également créer, supprimer et modifier des entités, il a donc besoin du EntityManager
de Screen
. Fondamentalement, un Process
doit tout savoir sur le jeu car cela affecte tellement de cela, mais il se sent faux.Comment puis-je continuer à mettre en œuvre cela mieux? Il semble que tout ait une hiérarchie de dépendance claire jusqu'à ce que vous arriviez à un processus, où il est jeté de la fenêtre.
Il semble également y avoir un couplage serré lorsque je voudrais pousser un nouvel écran. Dites, par exemple, j'ai un processus dans un écran MainMenu
qui vérifie le choix du menu. Si "nouveau jeu" est cliqué, j'ai besoin de pousser un nouvel écran, qui est créé à ce moment-là. J'ai lu que je ne devrais pas jeter au hasard new
ce que cela semble faire.
Un processus n'a pas besoin de tout savoir sur le jeu, mais il peut être nécessaire de savoir ce que le jeu fait. Ceci est la différence de base entre les classes et interfaces. (Une partie de la "D" en solide.)
Imaginez tous vos objets aussi séparés et entièrement indépendants. Ensuite, imaginez une seule connexion de chacun de ceux à un service qui fournit des instances d'interface. Chaque lien entre vos classes peut être brisé et remplacé par un ensemble de comportements (appelé interface). Appelez quelque chose comme Getinstance (...) pour obtenir une interface existante ou créer une nouvelle instance d'une. L'objet consommant ne se soucie pas de laquelle, où, ou lorsque l'instance a été créée - mais cela sait comment l'utiliser. (Si vous avez examiné l'injection de dépendance, cela pourrait commencer à sembler familier.)
Retour à la réalité maintenant. Lors de la séparation des dépendances des objets en utilisant des interfaces est une bonne idée généralement, vous n'avez pas besoin de retravailler tout ce que vous avez déjà. Il suffit de refroidir ce qui est difficile ou ne fonctionne pas correctement et continuez d'avancer.