A prima vista ho un problema semplice ma non riesco a capire come risolvere. Ho una classe astratta Compound
. Un Compound
è costituito da Structures
. Poi c'è anche un Container
che contiene l'1% diCompound
.
Un'implementazione "speciale" di Compound
ha Versions
. Per quel tipo di Compound
voglio Container
per contenere il Version
del Compound
e non il Compound
stesso.
Potresti dire "crea solo un'interfaccia Containable
" e una Container
contiene l'1% diContainable
. Comunque non funzionerà. Il motivo è che sto creando un framework e la parte principale di tale framework è di semplificare la memorizzazione e in particolare la ricerca di un tipo di dati speciale contenuto da Structure
oggetti. Quindi per cercare Containers
che contengono un Compound
composto da uno specifico Structure
richiede che il "Percorso" da Container
a Structure
sia ben definito (Numero di relazioni o join).
Spero che questo sia comprensibile. La mia domanda è come progettare le classi e le relazioni per essere in grado di fare ciò che ho delineato.
EDIT:
Tipo di problema di traduzione. con la versione non intendevo in termini di "versioning" ma più in termini di "varietà diversa" ma fondamentalmente uguale. Non c'è attivo / inattivo. Tutti sono attivi.
EDIT 2:
Si noti inoltre che queste classi sono classi di entità e quindi l'ereditarietà e le gerarchie complesse possono essere problematiche.
MODIFICA 3:
Semplicemente non vedere come può funzionare uno dei due pattern (Composito, Decoratore). Ho provato ma il problema è il "percorso trasversale", ad es. implementandolo nel contesto di Spring-data e QueryDSL.
Ho creato un diagramma di classe con commenti che potrebbero aiutare a capire il problema. Batch = Versione.