与洋葱建筑有关的DDD有界背景

时间:2015-04-28 03:39:15

标签: c# design-patterns architecture domain-driven-design 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都需要被抽象到自己的项目或命名空间中。

  1. 我的方法是不正确的,因为我在一个项目中拥有所有Domain Models而在另一个项目中拥有所有Domain Services?在不同的命名空间或项目中没有不同的有界上下文真的很重要吗?
  2. 如果您的Model A使用Bounded Context ABounded Context BBounded Context C等也需要使用完全相同的Model A,请执行你允许他们使用那个完全相同的模型,还是为每个Bounded Context创建一个新模型?
  3. 我是DDD的新手,很抱歉,这个问题是个愚蠢的问题。如果我提出问题并得到一个好的解释作为答案,我发现自己更好地理解了一些东西。

    非常感谢任何帮助。

1 个答案:

答案 0 :(得分:6)

  

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

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

    不同的项目/解决方案更多的是组织选择。如果不同的团队在卑诗省工作,这会让事情变得容易一些,而单独的二进制文件意味着BC可以更加独立地部署。

  2.   

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

    1. 这需要更多的域分析才能说明,但是有界上下文的整个要点是能够从完全不同的角度查看事物。 <极少数情况下

      • 完全相同的实体用于3种不同的BC
      • 你不会看到他们将来发展自己的方式
      • 该实体似乎并不属于给定的BC
    2. 然后您可能想要使用共享内核模式。否则,只需复制每个BC中的实体,让它们过自己的生活,或找到实体的真实BC,并链接到其他BC的ID。