Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 域是否应基于聚合进行模块化(每个聚合1个模块)?_Oop_Design Patterns_Module_Domain Driven Design - Fatal编程技术网

Oop 域是否应基于聚合进行模块化(每个聚合1个模块)?

Oop 域是否应基于聚合进行模块化(每个聚合1个模块)?,oop,design-patterns,module,domain-driven-design,Oop,Design Patterns,Module,Domain Driven Design,认为“模块结构和名称通常反映了模型的早期形式 比班级做的还多”。 关于域模块化的最佳实践是什么 例如:汽车发动机和发动机及汽车客户的简单领域 聚合1:发动机 聚合2:包含以下对象的汽车车轮、位置、轮胎 聚合3:客户 域是否应该基于聚合根进行模块化?也就是说,car模块包含具有工厂存储库等的共同响应聚合,客户模块包含共同响应聚合等 还是应该基于其他因素将其模块化?如果是,将聚合对象分散在不同的模块中是否是一件好事 为了进一步澄清,以下是我对MikeSW评论的回应: 知道这个领域可能会随着时间的推移

认为“模块结构和名称通常反映了模型的早期形式 比班级做的还多”。 关于域模块化的最佳实践是什么

例如:汽车发动机和发动机及汽车客户的简单领域

聚合1:发动机

聚合2:包含以下对象的汽车车轮、位置、轮胎

聚合3:客户

域是否应该基于聚合根进行模块化?也就是说,car模块包含具有工厂存储库等的共同响应聚合,客户模块包含共同响应聚合等

还是应该基于其他因素将其模块化?如果是,将聚合对象分散在不同的模块中是否是一件好事

为了进一步澄清,以下是我对MikeSW评论的回应:

知道这个领域可能会随着时间的推移而发展,应该在这个领域中实施一些敏捷思想。这导致模块化。我是敏捷开发的新手,对DDD也不是很有经验。但我知道模块化应该遵循一些模式(这就是我表达“最佳实践”的来源)


对于初学者来说,不清楚聚合是否真的应该代表用户故事中的一个章节(当然可能)。但在某些情况下,情况并非如此。因此,在这种情况下,模块应该包括聚合的一部分还是整个聚合(为了域的缘故)

构建适当域模块的一些基本规则:

  • 模块应包含一个或多个聚合(聚合对象不应分散在多个模块上)
  • 模块应与其他模块具有高内聚性和低耦合性(如果没有则更好)。努力使他们彼此独立
  • 将任何事件、工厂、存储库、服务放入包含它们绑定到的聚合的模块中
  • 模块应该反映域的关注点,命名应该反映普遍存在的语言
  • 如果某些模块是耦合的,则尝试使依赖项成为aciclic
  • 基于具有高内聚性的聚合和使用它们的上下文构建模块
  • 如果可能存在中高度耦合的模块,则创建一个父模块并将其放入其中
所以我的最终答案是否定的,模块不应该基于聚合(每个模块1 AR)构建。但基于域概念和使用耦合聚合的上下文


如果您认为我的回答无效,请添加评论(对于下层选民):)。仍在等待更好的指示。如果没有其他答案提交,我将接受此答案。

没有“最佳”实践,每个人都会按照自己认为适合应用程序及其应用程序的方式来做style@MikeSW鉴于该领域可能会随着时间的推移而发展,因此应该在该领域中实施一些敏捷思想。这导致模块化。我是敏捷开发的新手,对DDD也不是很有经验。但我知道模块化应该遵循一些模式(这就是我表达“最佳实践”的来源)。对于初学者来说,不清楚聚合是否真的应该代表用户故事中的一个章节(当然可能)。但在某些情况下,情况并非如此。那么在这种情况下,一个模块应该包括聚合的一部分还是整个聚合(为了域的缘故)?那么基本上你说1个模块==1个有界上下文?@DonZampano是的。但也可能存在多级有界上下文。例如,一家公司有许多部门。公司范围内的上下文可能有借贷者合计、股东合计等。公司可能有独立的有界环境,如会计部门、IT部门等。它最终取决于实现,但是是的,有界上下文是域的主要思想。