2012-06-12 31 views
0

我有一個相當簡單的域,其中大約有7-8個主要實體可以識別,這些實體可以是他們自己的聚合根。但是將會出現一個UI屏幕,它將列出系統中所有對象的聯合,這意味着所有聚合的聯合。影響域設計的用戶界面問題

我想到的一種方法是使用組合,即所有其他聚合根所指的元數據聚合,這將是一個獨立的實體。因此,對於此屏幕,我可以查詢此聚合,我移到這個新聚合的字段是需要在我的「所有對象」網格中顯示的公共字段。

另一種方法可能是有通過查詢其他存儲庫,並在應用層合併名單,並處理尋呼等

我建立了「所有對象」屏幕中的必備單品的應用服務方法我對第一個解決方案感到不安,因爲我可以看到一個影響我的域名設計的UI用例,但是數據庫沒有處理分頁,合併列表等問題的繁瑣工作,並且沒有任何連接,所有這些信息都由一個單一的,簡單的查詢。

第二種解決方案雖然看起來更整潔,但在易用性和性能方面卻有所下降。

請指教。

+0

我想你剛纔描述了一個讀寫應該分開的情況(你知道,那個叫cqrs的小模式)。 「所有對象」數據需要多少新鮮?你可以選擇顯式異步投影,或者定義一個數據視圖(有點像元數據的用途(btw,它不是一個聚合)),或者甚至在代碼中使用不同的路徑(查詢)來獲取數據你要。 –

回答

1

在這種情況下,我會建議使用read-models,它們本質上是價值對象或專門用於閱讀場景的DTO。使用讀取模型是保持實體和AR清潔的模式。至於讀取模型的創建方式,基本上有兩種選擇,就像您所描述的那樣。一種是讓一個存儲庫返回一個滿足給定視圖要求的讀取模型。這將允許您利用數據庫的性能。另一種選擇是在應用程序服務級別或表示層的事件中組合來自多個存儲庫或服務的讀取模型。這種方法更具可擴展性,因爲數據不必來自同一個數據源。