Я використовую DDD-подібний підхід для greenfield модуля існуючої програми; це не 100% DDD завдяки архітектурі, але я намагаюся використовувати деякі поняття DDD. У мене обмежений контекст (я думаю, що це правильний термін - я все ще вчуся про DDD), що складається з двох об'єктів: Conversation
і Message
. Бесіда - це корень, оскільки Повідомлення не існує без розмови, і всі повідомлення в системі є частиною бесіди.
У мене є ConversationRepository
клас (хоча він насправді більше схожий на шлюз, я використовую термін "сховище"), який знаходить розмови в базі даних; коли він знаходить розмову, він також створює (через Фабрики) список повідомлень для цієї розмови (виставляється як властивість). Це здається правильним способом поводження з речами, оскільки, мабуть, немає потреби в повномасштабному MessageRepository
класі, оскільки він існує лише тоді, коли ви знайдете розмову.
Однак якщо мова йде про збереження Повідомлення, чи несе ця відповідальність ConversationRepository, оскільки це сукупний корінь Повідомлення? Що я маю на увазі, чи повинен я мати метод ConversationRepository, який називається, AddMessage
який приймає повідомлення як його параметр і зберігає його в базі даних? Або я повинен мати окремий сховище для пошуку / збереження повідомлень? Здається, що логічна річ - це одне сховище на кожну організацію, але я також чув "одне сховище за контекстом".