2016-07-26 80 views
1

IM在任務系統,其中一個任務可以有集合的子任務和子任務可以有子任務收集等(遞歸)的工作。如何設計自參考聚集在域驅動設計

DOMAIN

task基於Organizational Chart

示例組織結構圖給出:

Mahdi 
---Saeed 
------Jaime 
------Ahmed 
---Tarawneh 
------Mae 
---Rasheed 

在組織結構圖上的人將在他分配任務的人。

比方說馬赫迪將指派任務賽義德命名prepare course materials for IELTS

然後Saeed可能會將任務分成子任務。

prepare course materials for IELTS 
---issue laptop and equipment (assigned to Jaime) 
---prepare the checklist form(assigned to Ahmed) 

然後在情況下,它確實是一個大課題,海梅可能會進一步將其劃分爲子任務。

按領域的專家,其通常在3levels

不變:

  • 移動任務的最後期限時,應檢查其不應超過其父任務的最後期限
  • 如果該任務具有子任務,它將基於它們的狀態。 (任務將保持等待,直到有一個未完成的一個子任務....任務會完成時所有的子任務完成後自動標記)
  • 如果他們沒有分每一個人任務可以更新自己的狀態任務

編輯

  • 我只能更新已分配給我的任務狀態或我指定給。
  • 我只能給那些直屬我

任務的工作人員我一定要堅持使用Task概念或有概念,即時通訊仍然缺少像MainTask的& SubTask類(只是一個例子)?

如果我將堅持Task概念,我應該加載整個圖形或僅直接父母和孩子?

,或者我應該只是委託的各項工作,以一個域名服務?這可能會將任務轉變爲貧血模型?

+0

這裏有一個業務流程,有一堆場景,它不僅僅是一個聚合的業務案例。乍一看,「Task」概念似乎也可以用作其他任務的分組標準。您需要在每種情況下確定每個業務案例和「Task」的正確集合及其結果(相關的** Event **),然後將它們「鏈接」爲場景。這不是微不足道的。 – MikeSW

+0

@Daskul你的問題是什麼?您的域模型到目前爲止看起來如何? – guillaume31

+0

@MikeSW你能幫我找出一些除了任務以外的更多概念嗎?我認爲自任務總是直接在上面,我不必加載整個圖。只有直接的父母和孩子。 –

回答

5

您應該查看沃恩弗農的一系列Effective Aggregate Design;他所探討的問題領域與您所描述的相似。

移動任務的最後期限時,應檢查其不應超過其父任務

是什麼,如果這不變的失敗成本,業務的最後期限?

如果錯過最後期限是一個必須防止的昂貴問題,那麼您將被迫進入一個設計,任務圖的所有最終期限需要包含在單個聚合邊界內(因爲最終,任務截止日期的所有寫入都需要立即與根任務的截止日期一致)。

但是,在寫入發生後,這不是檢測特別困難的條件。如果您可以放寬限制 - 允許「無效」最後期限,但實施檢測並補救它們的能力 - 那麼在您放置邊界的位置您將擁有更大的靈活性。

您的狀態需求中的問題類似:如果您需要狀態更新立即保持一致,那麼如果您需要在單個事務中將狀態更改的寫入級聯升級到任務圖,則全部任務狀態需要位於同一個聚合邊界內。

如果情況並非如此;如果足以發現子任務已完成,並在單獨的事務中更新父任務狀態,那麼您在繪製聚合邊界的位置具有更大的靈活性。

我的猜測是,你將要避免爲每個寫入加載整個任務圖。如果所有任務都是同一個聚合的一部分,那麼一次只能更新一個任務。立即一致意味着更多的寫爭用;您需要與領域專家坐下來,並確保每個人都瞭解這些對企業更重要。

  • 我只能更新分配給我或我分配給的任務狀態。
  • 我只能給那些直屬我

同樣,這是否真的有商業價值的任務的工作人員?這是否是您的任務分配環境的一部分,還是責任屬於授權?

您還需要考慮記錄的內容。如果您的模型是向誰報告的權限,那麼嘗試強制執行報告鏈中的連接任務分配不變是有意義的。但是,如果像大多數組織一樣,報告鏈是在現實世界中決定的,那麼由於其數據副本陳舊,因此模型執行嚴格約束並沒有意義。

任務分配可能類似 - 有些經理正在決定委託某項工作,而僅僅是通知系統。

在這些情況下,如果現實世界違反了商業規則,那麼系統應該跟蹤它,而不是試圖假裝它不會發生。

+1

如果我將繼續最終的一致性路徑。那麼我應該將這項工作委託給域服務嗎?順便說一句,我已經對我的帖子進行了編輯,我有時間審閱它。 –