Sto progettando un framework UI in Java. Ogni componente dell'interfaccia utente, rappresentato dalla classe Component
, nel framework è identificato da una chiave non modificabile String
. Quindi prendo la chiave nel costruttore stesso e non fornisco alcun setter.
Ora ho un'altra classe AggregateComponent
che rappresenta un componente contenente un array di componenti. Nella classe AggregateComponent
a Factory
viene utilizzata per creare i componenti figlio. Per alcuni motivi, la chiave dei componenti figlio deve essere parentComponent.key + index
, dove index
è l'indice dell'array del componente figlio. Quindi passo parentComponent.key + index
a Factory.create()
.
The contract is the
Factory
implementer should construct the childComponent
using the passed key.
Potremmo applicare questo contratto in AggregateComponent
controllando la chiave del componente creato rispetto alla chiave passata e generando un'eccezione. Ma sto chiedendo
Is there any solution (even a completely different design solution) without such contracts.
In realtà i componenti hanno lo scopo di visualizzare i dati da un oggetto (un POJO, JSON o XML). Per le primitive nell'oggetto è sufficiente un semplice Component
. Per gli array abbiamo bisogno del AggregateComponent
. Il factory è utilizzato in AggregateComponent
per separare la logica di creazione dei componenti figlio.
Come ho detto prima, la chiave dei componenti del bambino dovrebbe essere in forma particolare. In futuro potremmo scrivere un Component
per visualizzare le mappe (simile alla matrice). In quel caso la chiave potrebbe essere di forma parentComponent.key + cKey
dove cKey
è una chiave nella mappa.