Diciamo che sto implementando la mia versione di Scrabble. Attualmente ho una classe Board
che contiene molti Squares
. A Square
a sua volta è composto da un IBonus
e un Piece
. Le implementazioni dei bonus sono in realtà il solito bonus per Scrabble, ma è possibile che io possa provare ad aggiungere qualche nuovo bonus per rendere più piccante il gioco - la flessibilità qui è fondamentale!Progettare un sistema di bonus flessibile ed estensibile per l'implementazione di un gioco di Scrabble
Dopo averci pensato per un po 'sono giunto alla conclusione che per IBonus
implementazioni di lavorare, avranno bisogno di conoscere l'intera Board
e anche la sua posizione attuale (sul Board
, quindi sa dove è e può controllare se il pezzo che si trova nella stessa casella del bonus è). Questo mi colpisce tanto quanto fondamentalmente ha bisogno di sapere un sacco di informazioni.
Quindi, la mia ingenua implementazione sarebbe passare lo Board
come argomento al metodo IBonus.calculate()
, IBonus.calculate(Board board, Point position)
, ovvero.
Inoltre, sembra creare un riferimento circolare. O mi sbaglio?
Non mi piace particolarmente questo approccio, quindi sto cercando altri possibili approcci. So che posso fare in modo che calculate
accetti un'interfaccia invece di una classe concreta, ovvero calculate(IBoard board)
ma IMO non è poi così migliore del primo.
Temo di essere troppo concentrato sulla mia attuale implementazione per poter pensare a progetti completamente diversi che potrebbero adattarsi almeno alle soluzioni a questo problema. Forse potrei ri-progettare l'intero gioco e avere i bonus in altro posto, quindi faciliterebbe questo calcolo? Forse sono troppo concentrato per averli sul Board
? Spero davvero che ci siano altri approcci a questo problema!
Grazie
+1 per gli schemi utili –
Quale strumento hai utilizzato per creare i diagrammi? –
yUML, ti permette di crearli e li ospita online. –