Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 洋葱结构的DDD限定上下文_C#_Design Patterns_Architecture_Domain Driven Design_Onion Architecture - Fatal编程技术网

C# 洋葱结构的DDD限定上下文

C# 洋葱结构的DDD限定上下文,c#,design-patterns,architecture,domain-driven-design,onion-architecture,C#,Design Patterns,Architecture,Domain Driven Design,Onion Architecture,我有以下洋葱架构框架 域 实体-用于我的域实体 接口-用于我的域接口 服务-用于我的域服务 基础设施 数据-用于Fluent NHibernate持久性 接口-用于基础设施接口 日志记录-只是一个用于日志记录的界面,以防我想将日志库切换到其他地方 依赖项解析-我的大部分IoC注册都在这里 服务 接口-应用程序服务接口在这里,它们将在UI项目中实现 测试 基础设施测试-用于测试基础设施服务等 域测试-用于测试域模型和服务 Web UI-我在其中实现应用程序服务、用户界面等的用户

我有以下
洋葱架构
框架

    • 实体
      -用于我的域实体
    • 接口
      -用于我的域接口
    • 服务
      -用于我的域服务
  • 基础设施
    • 数据
      -用于
      Fluent NHibernate
      持久性
    • 接口
      -用于基础设施接口
    • 日志记录
      -只是一个用于日志记录的界面,以防我想将日志库切换到其他地方
    • 依赖项解析
      -我的大部分
      IoC
      注册都在这里
  • 服务
    • 接口
      -应用程序服务接口在这里,它们将在
      UI
      项目中实现
  • 测试
    • 基础设施测试
      -用于测试基础设施服务等
    • 域测试
      -用于测试域模型和服务
  • Web
    • UI
      -我在其中实现应用程序服务、用户界面等的用户界面项目
使用
域驱动开发
可以识别
受限上下文
。互联网上的大多数文献都指出,每个
有界上下文
都需要抽象到它们自己的项目或名称空间中

  • 那么,我的方法是否不正确,将我所有的
    域模型
    放在一个项目中,将我所有的
    域服务
    放在另一个项目中?在不同的名称空间或项目中没有不同的有界上下文真的重要吗
  • 如果您有一个
    模型a
    用于我的
    有界上下文a
    ,但是
    有界上下文B
    有界上下文C
    等也需要使用完全相同的
    模型a
    ,您是否允许他们使用完全相同的模型,或者您是否为每个
    有界上下文
    创建一个新模型 我是DDD的新手,如果这个问题是个愚蠢的问题,我很抱歉。如果我问一个问题并得到一个好的解释作为答案,我会发现自己对一些事情的理解会更好

    任何帮助都将不胜感激

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

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

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

  • 如果您有一个模型a用于我的有界上下文a,但有界上下文B、有界上下文C等也需要使用完全相同的模型a,您是允许他们使用完全相同的模型,还是为每个有界上下文创建一个新模型

  • 这需要更多的领域分析来说明,但有界上下文的整体观点是能够从完全不同的角度来看待事物。在极少数情况下

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

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

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

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

  • 如果您有一个模型a用于我的有界上下文a,但有界上下文B、有界上下文C等也需要使用完全相同的模型a,您是允许他们使用完全相同的模型,还是为每个有界上下文创建一个新模型

  • 这需要更多的领域分析来说明,但有界上下文的整体观点是能够从完全不同的角度来看待事物。在极少数情况下

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

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

    是的,我肯定会创建3个不同的模型。BC 1、2和3在
    模型A
    后面可能有相同的概念,但它将用于应用程序的不同部分。绘制一个简单的图形将帮助您可视化模型交互以及BCs之间发生的事情。感谢您现在的解释。不过,还有一个问题,与持久性相关,对于3个有界上下文中的
    模型A
    ,您是有3个不同的映射文件,将每个上下文模型绑定到自己的表中,还是有1个映射文件?好吧,我会选择3个