DDD驱动的解决方案结构

时间:2018-09-11 14:50:09

标签: dependencies domain-driven-design project solution

我正在基于DDD原理创建一个项目。在阅读互联网上的资源时,我想到了以下内容,这有意义吗?特别是像这样的部分:

  • 具有Shared.Core个项目,该项目在有限的上下文之间共享
  • 每个有界上下文都有单独的.Data个项目
  • 具有Rest.API个项目,该项目取决于Shared.CoreFeatureX.Core个项目。

下表显示了我创建的项目及其依赖项,->表示“依赖于”。

Rest.API -> Feature1.Core -> Feature1.Data
                          -> Shared.Core
         -> Feature2.Core -> Feature2.Data
                          -> Shared.Core
         -> Shared.Core

1 个答案:

答案 0 :(得分:1)

您可以根据需要命名文件夹,但建议:

  • 您有一个模块/命名空间/程序包/目录,该模块/命名空间不依赖任何基础架构或技术(例如REST,SQL,NOSQL,MONGO等),而仅依赖您的业务逻辑;这里有集合,值对象,域服务,Sagas等。每个有界上下文至少一个;我们将其命名为Domain层。它可能不依赖于其他域层。它应该没有副作用,易于测试。

  • 您可以在域层内部使用共享组件,但前提是它们是无状态且通用的,例如日期时间操作库,列表,堆栈等。

  • 从远程模型转换为本地模型的
  • 反腐败层。它们最有可能取决于多个域层。

  • 其他演示文稿,特定于基础结构和技术的库和框架,IO适配器和端口应与其他层明确分开。可能取决于域层。

因此,要映射到您已经有

Rest.API -> Feature1.Domain -> Shared.Lib
         -> Feature1.Infrastructure
         -> Feature1.ACL -> Feature1.Infrastructure
         -> Feature2.Domain -> Shared.Lib
         -> Feature2.Infrastructure
         -> Shared.Lib

带有以下注释:

  • Shared.Lib应该仅包含与技术无关,无副作用的库,语言构造,实用程序功能等
  • 功能1。域不应包含来自多个域/有界上下文的逻辑
  • 功能1.ACL(反腐败层)可以取决于基础结构(即从数据库或缓存存储/获取),但不应包含业务逻辑,而应仅包含从远程对象/概念到本地对象/的映射逻辑。概念。