2012-08-01 28 views
3

在DDD的上下文中,總是說存儲庫只能查詢聚合根。聚合根然後允許訪問聚合中的其他實體。但是,如何查詢聚合模型中的實體?查詢除根以外的其他集合中的實體

假設Orders聚合的情況。訂單是根,並有一個細節行列表,它引用了一個產品(這是另一個集合的根),並具有其他屬性,如數量

現在,假設我需要列出或排序引用的行到特定產品,生成不同服務使用的報告,如計算產品訂購請求的平均項目數。

搜索每個Oder,然後列出所有行並選擇我感興趣的行,聽起來不切實際。 Orders知識庫中的getLinesByProduct()聽起來更方便,但會將線暴露在聚合中。

如何爲此查詢建模?

也許問題是我在查詢我的Command模型,我應該有一個(非規格化的)查詢模型,其中的細節行是實體,包含所有需要的信息?

+0

更新:我發現了一個密切相關的問題[「DDD:實體的集合和存儲庫」](http://stackoverflow.com/questions/1356430/ddd-entitys-collection-and-repositories)。那種情況下的結論是,這些實體應該是自己的總和。塔爾強化了我的直覺,在我的情況下,同樣的解決方案適用。 – pablochacin 2012-08-01 11:12:42

+0

報告是核心應用程序的一部分還是單獨的應用程序? – casablanca 2012-08-02 01:56:22

回答

2

也許問題是,我查詢我的命令模式,我應該 有哪些細節線實體 與所有需要的信息(規格化)查詢模式?

這是完全正確的。 DDD不是爲了解決查詢問題,而是由於其各種約束和ORM施加的限制而經常因摩擦而反駁。查詢和特別是報告應該分開處理。您可以使用read-model pattern來支持作爲核心應用程序一部分的查詢,或者使用完全獨立的報告系統,該系統基於複製的數據進行操作。

相關問題