我想用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