Architecture 不断发展的业务-DDD与否?

Architecture 不断发展的业务-DDD与否?,architecture,domain-driven-design,repository,inversion-of-control,Architecture,Domain Driven Design,Repository,Inversion Of Control,我有一个项目,我已经在处理传统的三层体系结构(实体/业务/用户界面),我正在应用存储库模式和IoC 这里的想法是,我们是业务所有者,但业务正在发展,不能说实际上有一个最终的领域,并准备实施。我的实体不包含复杂的业务,我将业务逻辑保留在业务层中 虽然我们已经在使用存储库模式和IoC,但迁移到DDD真的有额外的价值吗?我是否应该将我的业务合并到我的实体中 [编辑]假设这是最好的做法,您会: 将实体层合并到业务层,而不是分开 (避免循环引用,因为实体可以有行为,甚至 致电业务服务部(据我所知) 在

我有一个项目,我已经在处理传统的三层体系结构(实体/业务/用户界面),我正在应用存储库模式和IoC

这里的想法是,我们是业务所有者,但业务正在发展,不能说实际上有一个最终的领域,并准备实施。我的实体不包含复杂的业务,我将业务逻辑保留在业务层中

虽然我们已经在使用存储库模式和IoC,但迁移到DDD真的有额外的价值吗?我是否应该将我的业务合并到我的实体中

[编辑]假设这是最好的做法,您会:

  • 将实体层合并到业务层,而不是分开

    (避免循环引用,因为实体可以有行为,甚至 致电业务服务部(据我所知)

  • 在适用的情况下,将一些业务服务行为移动到域实体中是拥有域模型的第一步吗

[更多]

  • 你的领域并不平凡
  • 项目团队对OOP/OOD有经验和兴趣
  • 您可以访问域专家
  • 你有一个迭代的过程

DDD的主要思想不仅仅是使用存储库,它与IoC无关,它是关于拥有业务通用语言,并根据反映业务的实体和价值对象设计域层,这样,您需要以面向对象的方式对其进行真正的建模,其中对象封装数据并包含行为,这样应用程序将在业务逻辑方面更具可维护性,并将通过利用面向对象的技术(如抽象、多态性、组合等)进行扩展


所以答案是肯定的

您可能会混淆域模型和DDD。域模型是一种体系结构模式,其中业务实体作为OO类实现,并使用存储库模式,而DDD是一组用于分析和建模业务的流程和原则。DDD实际上是实现领域模型的一种更加精细和正式的方法

无论如何,您不应该需要一个“最终”和“准备实施”的域,因为域模型和DDD都是为不断发展的域模型设计的

您说业务层包含逻辑而不是实体,而实际上实体是业务层(或域)


我要说的是,实现领域模型的开销是最小的,而且从长远来看,对于一个不断发展的模型来说,几乎总是值得的。

这几乎不是肯定/否定的问题

来自业务层的方法是否仅适用于某个类的单个实例?把它移到教室里

它是否适用于集合、几个不同的类和/或逻辑更复杂?可能没有通用的答案,无论您决定什么,都不要引入循环依赖关系并尝试打破现有的依赖关系——当需要进行重构时,您迟早会为此而感激的


完成后,请检查API并尽可能从中删除。

在这种情况下,将实体层合并到业务层而不是单独(以避免循环引用)中,将一些业务服务行为移动到域实体中,并使两者相互交互,这是拥有域模型的第一步?我不完全理解业务层和实体层之间的区别,但是是的,实体应该包含业务行为。您可能还混淆了位于域之上的应用程序层,它调用业务逻辑并持久化实体。例如:(实体层:Employee)(业务层:EmployeeService)。两者都驻留在不同的程序集中,业务层引用实体层,与employee相关的所有逻辑都在EmployeeService中(添加、终止等),而实体仅包含基本属性FirstName等。。