Sto usando un approccio simile a DDD per un modulo greenfield di un'applicazione esistente; non è DDD al 100% a causa dell'architettura ma sto cercando di usare alcuni concetti DDD. Ho un contesto limitato (penso che sia il termine corretto - sto ancora imparando a conoscere DDD) costituito 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 ConversationRepository
classe (anche se è molto più simile a un gateway, uso il termine "repository") che trova le conversazioni nel database; quando trova una conversazione crea anche (tramite Fabbriche) un elenco di messaggi per quella conversazione (esposto come proprietà). Questo sembra essere il modo corretto di gestire le cose in quanto non sembra esserci la necessità di una MessageRepository
classe completa in quanto esiste solo quando viene recuperata una conversazione.
Tuttavia, quando si tratta di salvare un messaggio, è questa la responsabilità del ConversationRepository, poiché è la radice aggregata di Message? Voglio dire, dovrei avere un metodo su ConversationRepository chiamato, diciamo, AddMessage
che prende un messaggio come parametro e lo salva nel database? O dovrei avere un repository separato per trovare / salvare i messaggi? La cosa logica sembra essere un repository per Entity, ma ho anche sentito "Un repository per Context".