【发布时间】:2018-12-20 10:16:43
【问题描述】:
我是 DDD 的新手,我的问题对你们中的许多人来说可能是微不足道的。
考虑学生和课程的情况。
只有当学生的年龄高于注册该课程所需的最低年龄时,该学生才能注册该课程。
在我看来,Student 和 Course 可以被视为聚合,其中 Student 是根实体,Course 是子实体,age 是要尊重的不变量。
Student 应该有一个 Student.SubscribeTo(Course course) 方法,并且该方法应该强制执行不变量 Student.Age >= Course.MinAge,否则会生成异常。
这在 DDD 方法中是否正确?或者我应该只将 CourseId 传递给 SubscribeTo? Student.SubscribeTo(int CourseId)
从我的角度来看,如果没有办法打破不变量,则应该允许从外部访问 Course 到聚合。如果我在代码的其他一些地方更改 Course.MinAge,我不会破坏我的业务需求,因为我希望仅在订阅课程时尊重年龄,并且我不介意以后 Course.MinAge 是否更改。
如果业务需求状态不同:当 Course.MinAge 更改时,如果 Student.Age < Course.MinAge,则应将已注册课程的学生从课程中删除。
【问题讨论】:
-
如果学生验证他的年龄,这很奇怪。在现实世界中,执行它的人不是学生本人。另外,如果你的根是
student,没有人应该直接引用course,所有都应该通过根来完成,所以Student.SubscribeTo(Course course)可能不起作用。 -
好的,所以你认为关系应该倒置?课程是根和studend孩子吗?
-
好吧,老实说,我没有具体的答案。另外,我猜该课程需要执行一些任务,例如列出课程中的所有学生,并按照您的指定,在
minAge更改时删除学生。但是学生可能想要列出他所有的课程。也许聚合将是一些CourseStudentAggregator,这将是所有相关操作的业务逻辑。我不知道是不是ddd。
标签: design-patterns architecture domain-driven-design software-design