Domain driven design DDD每个实体似乎都适合于一个集合

Domain driven design DDD每个实体似乎都适合于一个集合,domain-driven-design,aggregateroot,Domain Driven Design,Aggregateroot,我正在实施一个大学系统,我正在尝试使用DDD。我也在看蓝皮书。系统的基本实体是机构、课程、教授和学生。这个系统将允许许多机构,每个机构都有自己的课程、学生和教授 阅读关于集合的文章,所有的实体都属于集合机构,因为没有机构就没有课程,学生和教授也是如此。我这样想对吗 在某些地方,教授们可以进入他们教授的课程。使用这种方法,我是否应该始终通过机构访问课程?这种实现对我来说似乎很奇怪,所以我问自己,作为学生的教授是否应该成为自己的AR并拥有自己的知识库。教授和学生可以独立存在,事实上他们可能会与机构联

我正在实施一个大学系统,我正在尝试使用DDD。我也在看蓝皮书。系统的基本实体是机构、课程、教授和学生。这个系统将允许许多机构,每个机构都有自己的课程、学生和教授

阅读关于集合的文章,所有的实体都属于集合机构,因为没有机构就没有课程,学生和教授也是如此。我这样想对吗


在某些地方,教授们可以进入他们教授的课程。使用这种方法,我是否应该始终通过机构访问课程?这种实现对我来说似乎很奇怪,所以我问自己,作为学生的教授是否应该成为自己的AR并拥有自己的知识库。

教授和学生可以独立存在,事实上他们可能会与机构联系在一起。一个机构本身就存在。一门课程本身可能存在(如果同一门课程在多个机构开设,它们是否相同?)。。。领域专家最好对此提出建议(事实上,他们应该建议并指导整个设计)

如果聚合太大,则会遇到并发问题,如果找到正确的模型,可以避免这些问题

以下是我推荐阅读的一些PDF:


教授和学生可以独立存在,事实上,他们可能会与机构联系在一起。一个机构本身就存在。一门课程本身可能存在(如果同一门课程在多个机构开设,它们是否相同?)。。。领域专家最好对此提出建议(事实上,他们应该建议并指导整个设计)

如果聚合太大,则会遇到并发问题,如果找到正确的模型,可以避免这些问题

以下是我推荐阅读的一些PDF:


可能有助于您将这些实体划分为不同的聚合根的一个问题是:它们中的哪一个必须一起使用?这通常有助于作为第一个粗过滤器

比如说,要在课程中增加一名学生,你不需要学校吗

在你的例子中,一位教授访问了他所教授的课程。他可以通过提供他的教授id而不是教授实体来访问它们吗?如果他提供教授id,那么实体将不会通过引用而通过id进行关联


自从12年前蓝皮书问世以来,这些概念已经有了很大的发展。虽然蓝皮书是一本非常好的书,但我建议你也读红皮书()。这本书对DDD有一个更实用的方法,并展示了更现代的方法,如CQR和事件来源。

可能有助于您将这些实体划分为不同的聚合根的一个问题是:其中哪一个必须一起使用?这通常有助于作为第一个粗过滤器

比如说,要在课程中增加一名学生,你不需要学校吗

在你的例子中,一位教授访问了他所教授的课程。他可以通过提供他的教授id而不是教授实体来访问它们吗?如果他提供教授id,那么实体将不会通过引用而通过id进行关联

自从12年前蓝皮书问世以来,这些概念已经有了很大的发展。虽然蓝皮书是一本非常好的书,但我建议你也读红皮书()。这本书对DDD有一个更实际的方法,并展示了更现代的方法,如CQR和事件来源。

尽管你已经接受了答案,但我还是添加了这一点,因为评论太短了

当开始使用DDD时,几乎每个人都会被整个聚合根业务绊倒。我知道,因为我自己也去过那里:)

如前所述,领域专家在某些情况下可能会有所帮助,但请记住,所有权并不意味着包含。
订单
通常属于
客户
,但
客户
不是
订单
的AR,因为
订单
可以在没有
客户的情况下存在。你可能会想:“但是等等,那不是真的!”。这就是问题的症结所在。当我走进一家服装店时,我可以买一双鞋。我是一名客户,但除了我能出示的收据外,他们没有我的记录。我是现金客户。也许我的特定品牌的鞋子没有存货,但我仍然可以订购。他们会在邮件到达后联系我,很可能就是这样,我很可能还没有在任何计算机系统中注册。但是,同一家商店在其供应商处注册为
客户

那么,为什么要讲这个冗长的故事呢?好的,如果一个实体可以独立存在,只有一个表示所有者的值对象,那么它可能是AR。我可以在
客户详细信息中包含一些基本的客户信息,在
订单中包含
值对象?因此,
订单
可以是AR

不,让我们看一看<代码> OrthLoo> <代码>。我可以在
订单行
上包含一些基本的
订单详细信息
吗?这感觉很奇怪,因为许多订单行构成了一个
订单
。所以这不是很自然

同样地,
grabebunch
必须有一个
grabetem
和一组
grabeberry
对象

这似乎意味着,如果可以将任何内容视为可选,则可能表明相关实例是AR。但是,如果需要相关实例,则它是AR的一部分

这些观点非常广泛,但可以作为考虑你的结构的指导原则。

要记住的另一件事是,AR不应该在另一个AR中实例化。而应该使用表示关系的Id或Value对象。

即使您