我正在尝试使用 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
聚合根访问开发人员)?
对此有任何提示吗?
我的模型完全坏了,还是我错过了一些重要的东西?