Da qualche tempo sto sviluppando applicazioni secondo i principi della DDD, e, come molti, spesso mi imbatto in problemi quando si tratta di mantenere un aggregato.
Uno dei principali vantaggi del DDD è che mi consente di utilizzare tutta la potenza del design OO nel mio dominio - in quanto tale, voglio usare il polimorfismo e conformarmi al principio open-closed. Cioè Posso estendere la mia logica aggiungendo nuovi sottotipi senza richiedere modifiche ai supertipi.
Il problema si presenta quando si persiste. In qualche modo ho bisogno di appiattire questo dominio per una rappresentazione persistente, e successivamente di ripristinarlo. Come ottengo ciò, senza sporcare l'implementazione di Repository
con instanceof
(o equivalente nella lingua preferita) in tutto il luogo. Questo è generalmente considerato una cattiva forma, oltre a violare l'OCP, almeno nel repository stesso. Quando aggiungo un nuovo sottotipo, sono costretto ad aggiungere un caso nel repository.
C'è un modo elegante per gestirlo?