让我们假设一个项目展示这些规范:
Employee
可以组织Meeting
邀请其他Employee
个。{/ li>
Employee
都可以接受邀请参加Meeting
,但不会超过最大Participation
个。Manager
创作者的任何Employee
都可以随时取消Meeting
。exists
只要创建者(Employee
)存在(未删除或标记为已删除)。Meeting
包含一些优先于预期限制的参与者。Employee
的任何Meeting
都应该取消/删除此Participation
。Manager
取消Employee
的{{1}}时,Meeting
和Meeting
都应删除。我应该做:
Participation
聚合根,包含其创建的Employee
的集合。 Meeting
因此是Meeting
的内部实体,包含Employee
s的集合。Participation
s。因此只会聚集根源:
Employee
和Employee
。
实际上,经理可能被解雇,然后不是Manager
的不变量的一部分,反之亦然。
详情:
_ Employee
将提供方法Employee
,封装检查重要规则,例如是否超过参与者的最大数量。
_ createParticipation
还会提供工厂来创建Employee
,以便始终将正确的Meeting
分配给EmployeeId
。
_只会创建两个存储库:Meeting
和EmployeeRepository
,避免直接访问相应的内部部件。
(仅涉及创作,删除类似)
因此,为了创建ManagerRepository
的{{1}},我的入口点将是我通过Meeting
检索的创建者(Participation
)。
遵循严格的DDD练习是否有意义?
答案 0 :(得分:3)
您的员工聚合太大了。这会产生并发问题。如果两名员工同时接受邀请,会发生什么?一个事务将被回滚,因为它们尝试修改相同的聚合。除非你设计了一些花哨的冲突解决逻辑。
相反,请将参与和会议视为单独的聚合。