2015-08-20 52 views
0

如果我理解正确,那么在域驱动设计中,仅存在聚合根对象的存储库。那么,对于那些作为根子对象的对象来说,实现分页(或访问控制过滤)的正确方法是什么?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。

+0

您从不查询聚合根子项,因为:1)从概念上说,AR从来没有子项,2)聚合代表**一个完整的概念**,它是全部或全部概念,您无法选择哪个实现你想要的细节。 – MikeSW

回答

3

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

0

这听起来像有几个进程需要定义。

哪些应用程序/部分应用程序需要分配能力?

将域模型分页给我的部分不属于域/业务规则的一部分。这是一个应用程序的关注。

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