web-dev-qa-db-fra.com

Réduire les cycles de dépendance et réduire le couplage

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:

  • Il y a un ScreenStack qui contient une pile de Screens
  • Chaque Screen a un EntityManager et ProcessManager.
  • Le ProcessManager met à jour tous les entités Processes à partir du EntityManager.
  • A 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.

6
Shane

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.

0
John Fisher