Supposons que j'implémente ma propre version de Scrabble. J'ai actuellement une classe Board
qui contient beaucoup de Squares
. Un Square
à son tour est composé d'un IBonus
et un Piece
. Les mises en œuvre de bonus sont en fait le bonus habituel pour Scrabble, mais il est possible que j'essaie d'ajouter un bonus nouveau et tordu pour pimenter le jeu - la flexibilité est ici primordiale!Conception d'un système de bonus flexible et extensible pour la mise en œuvre d'un jeu de Scrabble
Après avoir réfléchi pendant un certain temps je suis venu à la conclusion que pour IBonus
mises en œuvre au travail, ils ont besoin de savoir l'ensemble Board
et aussi sa position actuelle (sur la Board
, il sait où il est et il peut vérifier la pièce qui est dans le même carré que le bonus est). Cela me semble aussi mauvais que fondamentalement il a besoin de connaître beaucoup d'informations. Donc, mon implémentation naïve serait de passer le Board
comme argument à la méthode IBonus.calculate()
, IBonus.calculate(Board board, Point position)
, c'est-à-dire.
En outre, il semble créer une référence circulaire. Ou ai-je tort? Je n'ai pas particulièrement aimé cette approche, donc je suis à la recherche d'autres approches possibles. Je sais que je peux faire calculate
accepter une interface au lieu d'une classe concrète, c'est-à-dire, calculate(IBoard board)
mais je ne suis pas tout à fait mieux que le premier cas. Je crains d'être trop concentré sur ma mise en œuvre actuelle pour être capable de penser à des conceptions totalement différentes qui pourraient s'adapter au moins aussi bien que des solutions à ce problème. Peut-être que je pourrais réorganiser l'ensemble du jeu et avoir les bonus à l'autre endroit, donc cela faciliterait ce calcul? Peut-être que je suis trop concentré sur les avoir sur le Board
? J'espère certainement qu'il existe d'autres approches à ce problème là-bas!
Merci
+1 pour les bons diagrammes –
Quel outil avez-vous utilisé pour créer les diagrammes? –
yUML, il vous permet de les créer et de les héberger en ligne. –