DDD: Запрос дочерних объектов совокупного корня

Если я правильно понял, в дизайне, управляемом доменом, есть репозитории только для совокупных корневых объектов. Итак, как правильно реализовать, например, подкачку (или фильтрацию управления доступом) для тех объектов, которые являются дочерними объектами корней.

Пример:

@Entity
public class Person extends AbstractPersistable<Long> {

  @OneToMany
  private List<Competence> competences = new ArrayList<>();

  public void addCompetence( Competence competence ) {
     this.competences.add( competence );
  }

  public List<Competences> competences() {
     return this.competences;
  }

}

Итак, если я сначала получу объект человека из репозитория, а затем отправлю подмножество (страницу) компетенций в свой интерфейс? Нет смысла создавать CompetenceRepository для поиска компетенций по человеку, потому что это ломает всю идею совокупных корней... На данный момент я использовал Spring Data JPA.


person Toni    schedule 20.08.2015    source источник
comment
Вы никогда не запрашиваете агрегатные корневые дочерние элементы, потому что: 1) концептуально AR никогда не имеет дочерних элементов, 2) агрегат представляет одну концепцию целиком , либо все, либо ничего, вы не можете выбрать, какую реализацию деталь, которую вы хотите.   -  person MikeSW    schedule 21.08.2015


Ответы (2)


Популярным подходом является отказ от использования модели предметной области (которая представляет собой транзакционную модель, оптимизированную для обработки команд) для запросов. Вы можете прочитать об этом немного больше, выполнив поиск CQRS.

person plalx    schedule 20.08.2015

Похоже, что есть несколько процессов, которые необходимо определить.

Какое приложение/часть приложения требует подкачки компетенций?

Пейджинговая часть модели домена для меня не принадлежит быть частью домена/бизнес-правил. Это проблема приложения.

Уровень службы приложений из DDD, вероятно, был бы подходящим местом для этого. Вы можете создать службу, которая поможет вашему конкретному приложению отображать страницы компетенций.

person Leon    schedule 26.08.2015