Non vorrei incoraggiare il tuo approccio specifico; è è modulare e sembra totalmente funzionale, ma suggerirei un leggero cambiamento.
Ti incoraggio a invertire la relazione tra HexGrid e HexGridLayout tale che invece di HexGridLayout accedendo direttamente e modificando le proprietà coords e center , invece le prende come parametri e restituisce un nuovo insieme di valori.
Poi ci sono due scelte per ottenere i campi coords e center aggiornati:
- Puoi dare qualsiasi
HexGridLayout che desideri utilizzare a HexGrid e HexGrid chiamerà update(coords, center) e ricevere nuovi valori per coords e center che imposterà su se stesso.
- Se attualmente
HexGrid non è quella che chiama update - allora qualsiasi classe è che la chiama su HexGridLayout dovrebbe chiamare update(hexGrid.coords, hexGrid.center) e recuperare il% aggiornatocoords / center valori aggiorna la sua istanza di HexGrid stessa.
Incoraggio il numero 2 qui sopra, perché disaccoppia completamente HexGridLayout da HexGrid mentre rendi disponibili i valori aggiornati di coords e center a chiunque desideri usarli per aggiornare un HexGrid - potresti usare 1% diHexGridLayout per ottenere valori aggiornati per qualsiasi numero di HexGrid s a causa di questo accoppiamento lento, o semplicemente usarlo per registrare o persino proiettare aggiornamenti futuri ecc.
Quindi, così com'è, il tuo design è modulare, anche se non direi che è completamente sciolto - perché il HexGridLayout è completamente dipendente dalla tua implementazione di HexGrid e non può essere usato per impaginare altri tipi di HexGrid (forse una rete basata HexGrid sarebbe utile per la funzionalità client / server che il HexGridLayout attualmente non supporterà per esempio).