Digamos que estoy implementando mi propia versión de Scrabble. Actualmente tengo una clase Board
que contiene muchos Squares
. A Square
a su vez se compone de IBonus
y Piece
. Las implementaciones de bonificación son en realidad la bonificación habitual para Scrabble, pero es posible que intente agregar una bonificación nueva y retorcida para darle más sabor al juego. ¡La flexibilidad aquí es primordial!Diseñando un sistema de bonificación flexible y extensible para la implementación de un juego de Scrabble
Después de pensar un rato llegué a la conclusión de que para IBonus
implementaciones para trabajar, que van a necesitar saber toda la Board
y también su posición actual (en la Board
, por lo que sabe dónde es y puede verificar la pieza que está en el mismo cuadrado que el bono). Esto me parece tan malo como básicamente, necesita saber mucha información.
lo tanto, mi aplicación ingenua sería pasar el Board
como argumento para IBonus.calculate()
método, IBonus.calculate(Board board, Point position)
, es decir.
Además, parece crear una referencia circular. ¿O estoy equivocado?
No me gusta particularmente este enfoque, entonces estoy buscando otros enfoques posibles. Sé que puedo hacer que calculate
acepte una interfaz en lugar de una clase concreta, es decir, calculate(IBoard board)
pero I IMO no es tan mejor que el primer caso.
Me temo estar demasiado concentrado en mi implementación actual como para poder pensar en diseños completamente diferentes que podrían encajar al menos tan bien como soluciones a este problema. Tal vez podría volver a diseñar todo el juego y tener las bonificaciones en otro lugar, por lo que facilitaría este cálculo? Tal vez estoy demasiado centrado en tenerlos en el Board
? ¡Ciertamente espero que haya otros enfoques para este problema!
Gracias
+1 para buenos diagramas –
¿Qué herramienta usaste para crear los diagramas? –
yUML, te permite crearlos y alojarlos en línea. –