2015-08-20 50 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的應用程序服務層可能是放置這個的地方。 您可以創建一項服務,幫助您的特定應用程序顯示權限分頁。