我想用DDD模擬場景,我們有團隊,開發人員和團隊應該完成的任務。如何訪問另一個聚合中的實體?
基本上,我假定:
Team
是一個實體(如它可以改變,例如,通過讓上板新開發者)Developer
是一個實體,以及(因爲它是重要的,其開發商做了什麼)Story
是一個實體(因爲它可以改變,例如,通過預約的工作項目上的故事)Work
是一個值對象(因爲它不能改變,一旦它已經完成)
什麼是相當明顯的是,Team
是一個聚合,包含Developer
實體。另外,Story
是一個聚合,包含Work
值對象。
所以,在開始的時候,我開始用下面的代碼:
var team = Team.FoundTeam();
team.WelcomeDeveloper("John Doe");
team.WelcomeDeveloper("Jane Doe");
var story = Story.WriteDownStory("Publish website");
story.AssignTeam(team);
到目前爲止,一切都很好。現在,下一步,我想收取故事的工作。基本上這可能如此簡單:
story.ChargeWork(new TimeSpan(2, 0, 0));
不幸的是,現在需要將工作分配給開發人員。這是我的問題:我如何建模?我不能做的是:
story.ChargeWork("Jane Doe", new TimeSpan(2, 0, 0));
如果有兩個同名的開發人員,這會失敗。我如何分配特定的開發人員實體而無需訪問它(因爲只能使用Team
聚合根訪問開發人員)?
對此有何暗示?
我的模型是完全破碎的,還是我錯過了一些重要的東西?
我看到您已將問題標記爲「數據建模」。這是你的想法告訴你的一個暗示:你正在建模數據(狀態),而不是建模業務流程即DDD。 – MikeSW 2013-05-02 08:53:56
感謝您的提示!這比第一眼看起來更有價值,因此+1 :-) – 2013-05-02 09:38:32