Допускает ли DDD, чтобы список был совокупным корнем?

Я пытаюсь понять основы предметно-ориентированного дизайна. Вчера я нашел код в проекте, над которым работаю, где репозиторий возвращал список сущностей, то есть List getMessages (), где сообщение является сущностью (имеет собственный идентификатор и может быть изменен). Теперь, читая о репозиториях в DDD, они довольно четко указывают, что репозиторий должен возвращать агрегированный корень и что любые действия с агрегатом должны выполняться путем вызова методов в агрегированном корне.

Я хотел бы поместить список в отдельный класс, а затем просто вернуть этот класс. Но в моем проекте в принципе нет необходимости делать это, за исключением соблюдения DDD, поскольку мы только показываем сообщения, добавляем новые или удаляем существующее сообщение. Нам никогда не придется удалять все сообщения, поэтому единственные методы, которые у нас будут, это addMessage(...), getMessages(), updateMessage(...) и removeMessage(...), что в основном и делает наша доменная служба.

Есть какие-нибудь идеи? Что лучше всего использовать в DDD для описания агрегатов и репозиториев?


person Andreas Selenwall    schedule 03.02.2011    source источник


Ответы (1)


Один из сбивающих с толку аспектов новичков в DDD - это концепция репозитория. Репозиторий: является посредником между уровнями отображения домена и данных, используя интерфейс, подобный коллекции, для доступа к объектам домена.

Репозиторий предоставляет возможность получить ссылку на агрегированный корень. Не сущность, объект значения, а совокупный корень (я не согласен с тем, что «Репозиторий должен возвращать совокупный корень»).

Предложения: - Один репозиторий на совокупный корень

  • Интерфейсы репозитория (например, IMessageRepository) находятся в модели предметной области.
public interface IMessageRepository()
{
     void saveMessage(Message msg);
     void removeMessage(Message msg);
     Ilist<Messages> getMessages();
}
  • Реализации репозитория (например, NHibernateMessageRepository при использовании nhibernate) находятся за пределами домена

Надеюсь на эту помощь !!

person Pedro de la Cruz    schedule 03.02.2011
comment
Конечно, репозиторий не должен возвращать агрегированный корень, он всегда должен возвращать только ссылку на агрегированный корень, что подразумевалось. Но спасибо за ответ, это помогло. А теперь я купил книгу Эрика Эванса, так что займусь дальнейшим изучением. - person Andreas Selenwall; 22.02.2011
comment
@AndreasSelenwall В чем разница между возвратом совокупного корня и возвращением совокупной корневой ссылки? Репозитории предназначены для возврата совокупных корневых экземпляров. - person plalx; 22.11.2014