Je me fais la réflexion suivante : si tu avais travaillé sur la conception dès le départ, en partant d'une feuille blanche, tu te serais probablement posé la question suivante : "Quelle est la responsabilité de mon moteur de rendu ? Et donc, quelles sont les fonctionnalités que je veux exposer dans mon interface ?"
Là, en faisant du refactoring, tu te poses la question suivante : "Quelles sont les fonctionnalités actuelles ?" Et j'ai l'impression que du coup, tu as beaucoup trop de fonctionnalités pour ton moteur. Et que tu exposes de types ou des fonctionnalités que l'utilisateur ne pourrait pas utiliser (tu le dis toi même), ce qui est un peu inutile (pourquoi ajouter une fonction createWindow qui retourne une Window si l'utilisateur ne peut rien en faire ? = détail d'implémentation)
Dans le premier cas, tu te serais probablement dis : "la responsabilité de mon moteur est d'afficher mes tiles et mes objets". Et tu aurais probablement exposer les fonctionnalités suivantes :
- créer une map de dimensions (W, H)
- affecter le type de tile TILE_TYPE à la position (x, y) (que le moteur de rendu se débrouille avec le gestionnaire de ressources pour savoir l'image à afficher pour TILE_TYPE !)
- ajouter/déplacer/supprimer un objet OBJECT_TYPE à la position (x, y) (qui peut représenter un véhicule, un bâtiment, une explosion, etc.)
Et c'est tout
Je simplifie un peu, pour une première analyse. Il est probable, en poussant l'analyse que l'on pourrait ajouter d'autres fonctionnalités (en particulier init() et quit())
Partager