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.