Ho un piccolo problema di separazione delle responsabilità che spero che qualcuno possa chiarire. Ho un piccolo modello composto da 2 classi: GameBoard e GamePiece, e la relazione ovvia è che una GameBoard può avere diversi GamePoeces.
Nell'applicazione che sto implementando, GameBoard e GamePiece contengono dati relativi al rendering sullo schermo (metodi di aggiornamento / disegno, trame, ecc.) e alla loro logica (numero di quadrati di gioco, tipo di tassello, ecc.). L'aggiornamento / Drawing the GameBoard fa sì che aggiorni / disegni i pezzi. Tuttavia, al fine di mantenere il principio di responsabilità unica, ho deciso di separare la logica dal rendering. Ma ho alcuni problemi per implementarlo adeguatamente.
Sono arrivato a un paio di soluzioni e non sono sicuro quale sia il migliore:
1- Creare classi GameBoardRenderer e GamePieceRenderer (che memorizzere Textures, aggiornare e disegnare), e ogni istanza queste classi di Renderer sarebbero correlate rispettivamente a una GameBoard o GamePiece. Il problema che vedo è che mi costringe a mantenere una doppia relazione tra GameBoard e GamePiece, GameBoardRenderer e GamePieceRenderer, e assicurarmi che sia sempre coerente.
2- Crea GameBoardRenderer e GamePieceRenderer, ma falli ereditare rispettivamente da GameBoard e GamePiece, portando tutti gli elementi di rendering in quelle classi, mantenendo l'associazione alle classi GameBoard e GamePiece. Il problema è che quando chiamo il metodo Update / Draw di GameBoard, non sarò in grado di chiamare il metodo di aggiornamento e disegno di GamePieceRenderer (dato che nessuna relazione sarà disponibile).
Che cosa dovrei fare? C'è una soluzione migliore?
Grazie mille.