讓我們使用博客上下文的經典示例。在我們的域名中,我們有以下情況:Users
可以寫入Posts
。 Posts
必須至少在一個Category
編目。可以使用Tags
來描述Posts
。 Users
可以對Posts
發表評論。DDD/CQRS:結合UI要求的讀取模型
四個實體(Post
,Category
,Tag
,Comment
)被實現爲由於我不同的聚集體沒有檢測到用於一個實體的數據應彼此干擾的任何規則。因此,對於每個聚合,我將有一個代表它的存儲庫。而且,每個聚合引用他人的id。
繼CQRS,從這個場景我已經扣除的命令,如WriteNewPostCommand
,PublishPostCommand
,DeletePostCommand
等等各自的查詢以及從庫中獲取數據導致典型應用案例。 FindPostByIdQuery
,FindTagByTagNameQuery
,FindPostsByAuthorIdQuery
等...
根據我們應用程序的哪個站點(後端或前端),我們將會有或多或少複雜的查詢。所以,如果我們在頭版,也許我們需要建立一些小部件來獲得最後的評論,最新的類別的帖子等等......涉及簡單的Query
對象(很少搜索標準)和QueryHandler
的查詢非常簡單(一個存儲庫作爲對處理程序類的依賴)
但在其他地方,此查詢可能更復雜。在管理面板中,我們需要在表格中顯示滿足複雜搜索條件的關係。可能是有趣的搜索帖子:作者姓名(無標識),類別名稱,標籤名稱,發佈日期......屬於不同聚合和不同存儲庫的標準。
此外,在我們的發佈表中,我們不想顯示帖子以及作者ID或類別ID。我們需要顯示所有信息(名稱用戶,頭像,類別名稱,類別圖標等)。
我的問題是:
在基礎架構層,我們在設計庫,搜索方法(的findAll,findById,findByCriterias ...),應該返回相應的實體引用到的所有關聯的ID?我的意思是,如果有一個方法
findPostById(uuid)
或findPostByCustomFilter(filter)
,應該返回一個post實例,並引用它具有的所有類別id,所有標籤id和它擁有的作者id?還是應該我的回購有某種方法來填充我想要的關聯給定的後期實例?如果我想搜索由John編寫並且分類爲「新聞」和「視頻」類別和標籤「科幻」和「冒險」的12/12/2014創建的帖子,並獲得完整每個彙總的詳細信息,應該如何創建我的
Query
和QueryHandler
?
a)創建與我的所有參數Query
(AUTHORNAME,categoriesNames,TagsNames,如果想retrive User
,Category
,Tag
協會全面詳細的),然後他QueryHandler
ensamble不同的讀機型中唯一的一個。要麼...
二)創建不同Queries
(FindCategoryByName,FindTagByName,FindUserByName),然後我的網絡控制器調用,以便日後 呼叫FindPostQuery但現在通過他的AUTHORID,類別ID,標籤識別來自其他查詢返回的?
b)解決方案看起來更乾淨,但看起來我更加昂貴。