2012-04-28 70 views
0

我是DDD的新手,所以如果有些術語/理解有點偏離,請執行我。但請糾正我和任何意見,表示讚賞。在多個聚合根中尋呼

比方說,我正在做一個社會工作董事會網站,我已經確定了我的聚合根:候選人,工作和公司。非常不同的事物/上下文,因此每個都有自己的數據庫表,存儲庫和服務。但現在我必須建立一個Pinterest風格的主頁,其中數據塊顯示候選人,工作或公司的數據。

現在棘手的部分是數據塊必須在最後一次發生它所代表的聚合事件(公司被喜歡/評論,或作業被更新等)時被排序,並且分頁以無限滾動,就像Pinterest一樣。由於這些聚合獨立發生,我無法知道有多少聚合在任何特定頁面上。 (但如果我做btw,說一個表,跟蹤聚合的最後更新時間,我不得不將其推廣到另一個聚合根,有它自己的存儲庫?)

我會在哪裏實現分頁邏輯?我讀過某個地方應該有一個服務器每個存儲庫每聚合根,所以我應該排序和頁面控制器(我使用MVC的方式)?還是應該有一個獨立的應用服務來處理這樣的跨界問題?無論哪種情況下,我必須從數據庫獲取所有聚合的所有實體?

這就是太多的問題了,不過我基本上問:

  1. 進行分頁展示,商務,或持久邏輯?哪一個水平層?
  2. 跨境代碼應該放在DDD的哪個位置?哪個垂直堆棧?

回答

0

想到了幾件事情。

  • 這個彙總數據需要多少新鮮?我懷疑實時是否會增加很多價值。與商務人士交談並討價還價以獲得一些延遲。這將允許您爲該問題構建更簡單的解決方案。
  • 爲什麼不讓某個進程異步執行掃描,聚合,排序和存儲結果?甚至不需要在數據庫中(Redis)。討價還價的延遲可能是運行您的流程的時間間隔。
  • 在你的例子中,尋呼幾乎不是一個商業決策問題。你只需要提供無限滾動和一些Ajax調用來獲取緩存的,聚合的,排序的信息。這與DDD無關。
  • 您的UI構件和聚合,排序過程似乎是非常重要的一件事,它們與數據一起工作,或者更好 - 每個上下文的數據組件,以所需的格式提供數據。