Ho una classe chiamata Canvas
che funge da contenitore per un numero di Rectangle
.
Il Rectangle
s ha il seguente comportamento:
- Possono essere spostati all'interno di
Canvas
. - Possono essere ridimensionati.
- Non possono sovrapporsi, spostarsi l'uno sull'altro o oltrepassare i limiti di
Canvas
. - Il lato di un rettangolo può essere attaccato al lato di un altro rettangolo. Il lato allegato di
Rectangle
sarà uguale alla posizione del lato a cui è stato collegato per tutto il tempo in cui è collegato ad esso. Questa è una relazione a senso unico in quanto ilRectangle
a cui è stato assegnato non cambierà a causa di eventuali modifiche nelRectangle
allegato.
A mio parere, la posizione di Rectangle
è una proprietà di quel Rectangle
e la modifica della posizione di Rectangle
dovrebbe consistere nell'impostazione di tale proprietà. Tenendo presente questo, a causa delle regole 3 e 4, ogni Rectangle
deve essere in grado di determinare la posizione di ogni altro Rectangle
sullo stesso Canvas
e le dimensioni della Canvas
stessa, il che significa che deve avere un riferimento al Canvas
in cui è contenuto. Ciò sembra negativo a causa del riferimento circolare creato tra ogni Rectangle
e il suo Canvas
.
Ho anche giocato con l'idea che Rectangle
s non dovrebbe contenere la logica che detta il loro movimento / ridimensionamento e invece di avere tutta quella logica in Canvas
. Il Canvas
sembra diventare in qualche modo un oggetto dio, contenente i mapping degli allegati per tutto Rectangle
s e l'aggiornamento delle posizioni dovuto a loro quando una Rectangle
si sposta oltre a esporre un'interfaccia che ti consente di spostare, aggiungere e allega Rectangle
s. Rectangle
s non fa altro che contenere dati.
Il mio più grande punto di confusione qui è che sembra che questo tipo di problema debba essere stato incontrato prima, ma per la vita di me non riesco a descriverlo in generale abbastanza da trovare un altro esempio. Ci sono degli schemi accettati che si potrebbero usare per affrontare questo o dovrò imparare ad amare i riferimenti circolari?