DDD:查询聚合根的子对象

时间:2015-08-20 20:30:40

标签: spring jpa domain-driven-design aggregateroot

如果我理解正确,在域驱动设计中只有聚合根对象的存储库。那么,对于作为根的子对象的那些对象,实现例如分页(或访问控制过滤)的正确方法是什么。

示例:

@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;
  }

}

因此,如果我首先从存储库中获取person对象,然后我想将能力的子集(页面)发送到我的前端?创建CompetenceRepository以按人员查找权限是没有意义的,因为它破坏了聚合根的整体思想......现在我使用了Spring Data JPA。

2 个答案:

答案 0 :(得分:3)

一种流行的方法是避免使用域模型(这是针对处理命令优化的事务模型)进行查询。您可以通过搜索CQRS来了解更多信息。

答案 1 :(得分:0)

这听起来似乎很少有流程需要定义。

需要分配能力的申请/申请部分是什么?

为我分配域模型的一部分不属于域/业务规则的一部分。这是一个应用问题。

DDD的应用程序服务层可能就是放置它的地方。 您可以创建一个服务,帮助您的特定应用程序显示权限分页。