域驱动设计和跨领域关注接口定义

Rom*_*kin 2 .net c# domain-driven-design cross-cutting-concerns

我公司正在尝试采用DDD。似乎DDD的指导是要求域程序集定义其所有服务接口,并允许实现者对域程序集进行引用并实现服务接口。然后使用DI,该域将获得实现。但是,出于交叉考虑,要求域程序集重新定义接口(例如日志记录等)不是接口程序集的核心业务领域,这是不负责任的。我注意到,诸如Quartz.NET之类的许多商业组件都在使用一组标准的,广泛接受的接口,例如Apache Commons,以一种框架友好的方式解决了跨领域的问题。这是否与DDD方式一致,还是真的像AOP这样跳了起来,

以供参考:

来自http://www.infoq.com/articles/ddd-in-practice

“这些是可重用的非域相关问题,通常会在包括域层在内的所有代码中分散和重复。将这种逻辑嵌入域对象中会导致域层与非域相关代码纠结和混乱。”

来自http://cyrille.martraire.com/2009/12/your-crosscuttingconcerns-are-someone-else-core-domai/

“您的跨领域问题是其他人的核心领域”

Mik*_*eSW 5

似乎DDD的指导是要求域组装

DDD 不需要任何东西。域层将域概念和用例分组。域本身需要在域级别定义的抽象。我的意思是领域用例需要。记录是基础(技术)方面。通常,此类抽象是公用的共享层/组件的一部分,并且可用于应用程序的所有部分。

域不关心这些东西,不应将DDD视为食谱,而是“如何做”。这是一种心态,其中应用程序的设计围绕业务概念和用例,所有其他技术方面都是实现细节。

“您的跨领域问题是其他人的核心领域”

这意味着功能仅仅是对您的支持系统,这是其他组件的目的(领域)。

我建议您也阅读更多有关DDD的方法,并尝试掌握思维定势,并为您的应用程序采用用例方法。可以将您的应用程序视为由许多专用微型应用程序组成的组,每个微型应用程序都有自己的关注点,但必须与他人进行交流。如果您逐个组件地构建事物,那么您已经了解了DDD,并且顺便说一句,您也在练习敏捷。