Ich verwende einen DDD-ähnlichen Ansatz für ein Greenfield-Modul einer vorhandenen Anwendung. Aufgrund der Architektur ist es nicht 100% DDD, aber ich versuche, einige DDD-Konzepte zu verwenden. Ich habe einen begrenzten Kontext (ich denke, das ist der richtige Begriff - ich lerne immer noch über DDD), der aus zwei Entitäten besteht: Conversation
und Message
. Konversation ist die Wurzel, da eine Nachricht ohne die Konversation nicht existiert und alle Nachrichten im System Teil einer Konversation sind.
Ich habe eine ConversationRepository
Klasse (obwohl es eigentlich eher wie ein Gateway ist, verwende ich den Begriff "Repository"), die Konversationen in der Datenbank findet. Wenn eine Konversation gefunden wird, wird (über Fabriken) auch eine Liste von Nachrichten für diese Konversation erstellt (als Eigenschaft verfügbar gemacht). Dies scheint die richtige Vorgehensweise zu sein, da eine vollständige MessageRepository
Klasse nicht erforderlich zu sein scheint, da sie nur vorhanden ist, wenn eine Konversation abgerufen wird.
Ist dies jedoch die Verantwortung des ConversationRepositorys, wenn es um das Speichern einer Nachricht geht, da es sich um die Gesamtwurzel der Nachricht handelt? Was ich meine ist, sollte ich eine ConversationRepository-Methode mit dem Namen haben, AddMessage
die eine Nachricht als Parameter annimmt und in der Datenbank speichert? Oder sollte ich ein separates Repository zum Suchen / Speichern von Nachrichten haben? Das logische Ding scheint ein Repository pro Entität zu sein, aber ich habe auch "Ein Repository pro Kontext" gehört.
quelle
Sie könnten das schaffen ConversationService und injizieren IConversationRepository und IMessageRepository in seinem Konstruktor. Verwenden Sie Repositorys für einfache CRUD-Vorgänge und Services für alles andere (Zwischenspeichern, Speichern von Logik usw.).
quelle