洋葱架构的 DDD 限界上下文
DDD Bounded Contexts with Onion Architecture
我有以下 Onion Architecture
框架。
Domain
Entities
- 对于我的域实体
Interfaces
- 对于我的域接口
Services
- 对于我的域服务
Infrastructure
Data
- 为了 Fluent NHibernate
坚持
Interfaces
- 对于基础结构接口
Logging
- 只是一个用于日志记录的界面,以防我想将我的日志库切换到其他东西。
Dependency Resolution
- 我的大部分 IoC
注册都在这里。
Services
Interfaces
- 应用程序服务接口在这里,它们将在 UI
项目中实现。
Tests
Infrastructure Tests
- 用于测试基础设施服务等
Domain Tests
- 用于测试领域模型和服务
Web
UI
- 我在其中实现应用程序服务、用户界面等的用户界面项目...
使用 Domain Driven Development
可以识别 Bounded Contexts
。互联网上的大多数文献都指出每个 Bounded Context
需要抽象到自己的项目或命名空间中。
- 那么我的方法是否不正确,因为我的所有
Domain Models
都在一个项目中,而我所有的 Domain Services
都在另一个项目中?在不同的命名空间或项目中没有不同的限界上下文真的很重要吗?
- 如果你有一个
Model A
,我的 Bounded Context A
使用了它,但是 Bounded Context B
、Bounded Context C
等也需要使用完全相同的 Model A
, 你允许他们使用完全相同的模型,还是为每个 Bounded Context
创建一个新模型?
我是 DDD 的新手,如果这个问题是个愚蠢的问题,我深表歉意。如果我提出问题并得到很好的解释作为答案,我会发现自己理解得更好。
任何帮助将不胜感激。
Is my approach then incorrect for having all my Domain Models in one project and all my Domain Services in another project? Does it really matter not having different bounded context's in different namespaces or projects?
不同的命名空间是一个概念性的 和 一个实用的解决方案,否则当两个相邻的概念在不同的子域中使用相同的名称时,您可能会发生实体名称冲突.
不同 projects/solutions 更像是一种组织选择。如果单独的团队在 BC 上工作,事情会变得更容易一些,并且单独的二进制文件意味着 BC 可以更独立地部署。
If you have a Model A which is used my Bounded Context A, but Bounded Context B, Bounded Context C, etc also needs to use the exact same Model A, Do you allow them to use that exact same model, or do you create a new model for each Bounded Context?
这需要更多的领域分析才能说明,但限界上下文的全部意义在于能够从完全不同的角度查看事物。在极少数情况下
- 3 个不同的 BC 中使用了完全相同的实体
- 你看不到他们在未来以自己的方式发展
- 该实体似乎不自然地属于给定的 BC
那么您可能想要使用共享内核模式。否则,只需复制每个 BC 中的实体并让它们过自己的生活,或者从其他 BC 中找到该实体的真实 BC 和 link 到其 ID。
我有以下 Onion Architecture
框架。
Domain
Entities
- 对于我的域实体Interfaces
- 对于我的域接口Services
- 对于我的域服务
Infrastructure
Data
- 为了Fluent NHibernate
坚持Interfaces
- 对于基础结构接口Logging
- 只是一个用于日志记录的界面,以防我想将我的日志库切换到其他东西。Dependency Resolution
- 我的大部分IoC
注册都在这里。
Services
Interfaces
- 应用程序服务接口在这里,它们将在UI
项目中实现。
Tests
Infrastructure Tests
- 用于测试基础设施服务等Domain Tests
- 用于测试领域模型和服务
Web
UI
- 我在其中实现应用程序服务、用户界面等的用户界面项目...
使用 Domain Driven Development
可以识别 Bounded Contexts
。互联网上的大多数文献都指出每个 Bounded Context
需要抽象到自己的项目或命名空间中。
- 那么我的方法是否不正确,因为我的所有
Domain Models
都在一个项目中,而我所有的Domain Services
都在另一个项目中?在不同的命名空间或项目中没有不同的限界上下文真的很重要吗? - 如果你有一个
Model A
,我的Bounded Context A
使用了它,但是Bounded Context B
、Bounded Context C
等也需要使用完全相同的Model A
, 你允许他们使用完全相同的模型,还是为每个Bounded Context
创建一个新模型?
我是 DDD 的新手,如果这个问题是个愚蠢的问题,我深表歉意。如果我提出问题并得到很好的解释作为答案,我会发现自己理解得更好。
任何帮助将不胜感激。
Is my approach then incorrect for having all my Domain Models in one project and all my Domain Services in another project? Does it really matter not having different bounded context's in different namespaces or projects?
不同的命名空间是一个概念性的 和 一个实用的解决方案,否则当两个相邻的概念在不同的子域中使用相同的名称时,您可能会发生实体名称冲突.
不同 projects/solutions 更像是一种组织选择。如果单独的团队在 BC 上工作,事情会变得更容易一些,并且单独的二进制文件意味着 BC 可以更独立地部署。
If you have a Model A which is used my Bounded Context A, but Bounded Context B, Bounded Context C, etc also needs to use the exact same Model A, Do you allow them to use that exact same model, or do you create a new model for each Bounded Context?
这需要更多的领域分析才能说明,但限界上下文的全部意义在于能够从完全不同的角度查看事物。在极少数情况下
- 3 个不同的 BC 中使用了完全相同的实体
- 你看不到他们在未来以自己的方式发展
- 该实体似乎不自然地属于给定的 BC
那么您可能想要使用共享内核模式。否则,只需复制每个 BC 中的实体并让它们过自己的生活,或者从其他 BC 中找到该实体的真实 BC 和 link 到其 ID。