Sto usando un approccio tipo DDD per un modulo greenfield di un'applicazione esistente; non è DDD al 100% a causa dell'architettura, ma sto cercando di utilizzare alcuni concetti DDD. Ho un contesto limitato (penso che sia il termine corretto - sto ancora imparando a conoscere il DDD) composto da due Entità: Conversation
e Message
. La conversazione è la radice, poiché un messaggio non esiste senza la conversazione e tutti i messaggi nel sistema fanno parte di una conversazione.
Ho una classe ConversationRepository
(anche se in realtà è più simile a un gateway, io uso il termine "Repository") che trova Conversazioni nel database; quando trova una conversazione crea anche (tramite le fabbriche) un elenco di messaggi per quella conversazione (esposti come una proprietà). Questo sembra essere il modo corretto di gestire le cose poiché non sembra esserci la necessità di una classe di% co_de in piena regola, poiché esiste solo quando viene recuperata una conversazione.
Tuttavia, quando si tratta di salvare un messaggio, è questa la responsabilità del ConversationRepository, poiché è la radice aggregata del messaggio? Quello che voglio dire è, dovrei avere un metodo su ConversationRepository chiamato, ad esempio, MessageRepository
che accetta un messaggio come parametro e lo salva nel database? O dovrei avere un repository separato per trovare / salvare messaggi? La cosa logica sembra essere un repository per Entity, ma ho anche sentito "One repository per Context".