Я использую DDD-подобный подход для нового модуля существующего приложения; это не 100% DDD из-за архитектуры, но я пытаюсь использовать некоторые концепции DDD. У меня есть ограниченный контекст (я думаю, что это правильный термин - я все еще изучаю DDD), состоящий из двух сущностей: Conversation
и Message
. Беседа является корнем, поскольку Сообщение не существует без диалога, и все сообщения в системе являются частью диалога.
У меня есть ConversationRepository
класс (хотя он действительно больше похож на шлюз, я использую термин «хранилище»), который находит беседы в базе данных; когда он находит беседу, он также создает (через фабрики) список сообщений для этой беседы (отображается как свойство). Похоже, что это правильный способ обработки вещей, поскольку нет необходимости в полномасштабном MessageRepository
классе, поскольку он существует только при извлечении беседы.
Однако когда речь идет о сохранении сообщения, несет ли это ответственность ConversationRepository, так как это совокупный корень сообщения? Я имею в виду, должен ли я иметь метод в ConversationRepository, который называется, скажем, AddMessage
который принимает сообщение в качестве параметра и сохраняет его в базе данных? Или у меня должен быть отдельный репозиторий для поиска / сохранения сообщений? Логичной вещью является один репозиторий на сущность, но я также слышал «Один репозиторий на контекст».
источник
Вы можете создать ConversationService и внедрить IConversationRepository и IMessageRepository в его конструктор. Используйте репозитории для простых операций CRUD и сервисы для всего остального (кэширование, сохранение логики и т. Д.)
источник