【问题标题】:DDD Bounded Contexts with Onion Architecture洋葱架构的 DDD 限界上下文
【发布时间】:2017-01-21 06:33:58
【问题描述】:

我有以下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 都需要抽象到自己的项目或命名空间中。

  1. 我的方法是否不正确,因为我的所有Domain Models 都在一个项目中,而我所有的Domain Services 都在另一个项目中?在不同的命名空间或项目中没有不同的限界上下文真的很重要吗?
  2. 如果你有一个Model A 使用我的Bounded Context A,但Bounded Context BBounded Context C 等也需要使用完全相同的Model A,你是否允许他们使用完全相同的模型,还是为每个Bounded Context 创建一个新模型?

如果这个问题是一个愚蠢的问题,我是 DDD 的新手,很抱歉。如果我提出一个问题并得到一个很好的解释作为答案,我会发现自己能更好地理解一些事情。

任何帮助将不胜感激。

【问题讨论】:

    标签: c# design-patterns architecture domain-driven-design onion-architecture


    【解决方案1】:

    我的方法是否不正确,因为我的所有领域模型都在一个项目中,而我的所有领域服务都在另一个项目中?在不同的命名空间或项目中没有不同的限界上下文真的很重要吗?

    1. 不同的命名空间是一个概念一个实用的解决方案,否则当两个相邻的概念在不同的子域中使用相同的名称时,您可能会发生实体名称冲突。

      除此之外,不同的项目/解决方案更多是一种组织选择。如果单独的团队在 BC 上工作,事情会变得更容易一些,并且单独的二进制文件意味着 BC 可以更独立地部署。

    如果您有一个模型 A 使用我的限界上下文 A,但限界上下文 B、限界上下文 C 等也需要使用完全相同的模型 A,您是否允许他们使用完全相同的模型,或者执行您为每个有界上下文创建一个新模型?

    1. 这需要更多的领域分析才能说明,但限界上下文的全部意义在于能够从完全不同的角度看待事物。在极少数情况下

      • 完全相同的实体用于 3 个不同的 BC
      • 您不会看到他们在未来以自己的方式发展
      • 该实体似乎并不自然地属于给定的 BC

    那么您可能想要使用共享内核模式。否则,只需复制每个 BC 中的实体,让它们过自己的生活,或者找到实体的真实 BC 并从其他 BC 链接到它的 ID。

    【讨论】:

    • 是的,我肯定会创建 3 个不同的模型。 BC 1、2 和 3 可能在 Model A 背后共享相同的概念,但它将用于应用程序的不同部分。绘制一个简单的context map 将帮助您可视化模型交互以及 BC 之间发生的情况。
    • 感谢您的解释,它现在很有意义。不过,除此之外,还有一个与持久性相关的问题,对于 3 个 bounded contexts 中的 Model A,您是否有 3 个不同的映射文件,将每个上下文模型绑定到自己的表,还是有 1 个映射文件?
    • 好吧,我也会使用 3 个不同的映射文件。想想客户这个概念。根据上下文,它可能是潜在客户客户客户。这 3 个模型具有相同的想法,但绝对不具有相同的属性。没有好的独特模型,也没有规范模型。 DDD 使我们能够根据不同的上下文创建尽可能多的模型。但它们显然会在模型通过上下文时共享相同的 ID。
    • Thanx @MaxS-Betclic 在我改进我的解决方案时会考虑到这一切。
    猜你喜欢
    • 2011-03-24
    • 2011-10-09
    • 2020-01-21
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 2015-03-17
    • 1970-01-01
    相关资源
    最近更新 更多