Domain driven design DDD-有界上下文和部署单元

Domain driven design DDD-有界上下文和部署单元,domain-driven-design,Domain Driven Design,我刚刚读过Vaughn Vernon的《实现域驱动设计》一书,我对有界上下文如何与应用程序对齐感到有点困惑 一个应用程序中可以有多个有界上下文吗?如果是这样,那么什么决定了一个上下文是应该与另一个上下文一起部署,还是应该作为一个独立单元部署 如果我在一个应用程序(部署单元)中有多个有界上下文,并且一个客户端(例如UI)同时需要来自多个上下文的信息,那么我是否应该创建一个新的应用程序服务来支持此场景 一个应用程序中可以有多个有界上下文吗 您可以选择在单个应用程序中组织多个有界上下文,选择名称空间/

我刚刚读过Vaughn Vernon的《实现域驱动设计》一书,我对有界上下文如何与应用程序对齐感到有点困惑

一个应用程序中可以有多个有界上下文吗?如果是这样,那么什么决定了一个上下文是应该与另一个上下文一起部署,还是应该作为一个独立单元部署

如果我在一个应用程序(部署单元)中有多个有界上下文,并且一个客户端(例如UI)同时需要来自多个上下文的信息,那么我是否应该创建一个新的应用程序服务来支持此场景

一个应用程序中可以有多个有界上下文吗

您可以选择在单个应用程序中组织多个有界上下文,选择名称空间/文件夹之类的内容来分隔它们:

/domain
/主张
/Policy.cs
/检查
/Policy.cs
/承保
/Policy.cs

(此“策略”示例来自DDD)

这种方法的优点是简单,但也有许多缺点:

  • 更可能导致上下文之间的流血和污染-维护边界需要很多规则,因为如果对象都在同一个项目中,则很容易引用另一个上下文中的对象
  • 如果有多个团队在应用程序上工作,则更难管理
  • 在部署方面选择较少(可能不是问题)
如果是这样,那么什么决定了一个上下文是应该与另一个上下文一起部署,还是应该作为一个独立单元部署

你必须考虑把它们放在一个应用程序中的优点和缺点,而不是拆分它们。有些我已经在上面提到过了,但是还有其他的事情要考虑。 不同的上下文是否有不同的非功能性需求?i、 e.扩展、性能需求等?如果是这样,您将希望能够单独部署它们,因此它们不应该是同一应用程序的一部分

您是否受到可选择的技术或可部署到的服务器的任何限制?可能存在一些限制,使其更难转向更微服务风格的体系结构

这个问题还有一个组织因素,这取决于你所在的组织类型。您是否有多个团队在您的系统上工作?如果你在一个以IT为主要业务的组织中工作,你会经常发现该企业已经为你做出了一些决策,通过他们根据上下文组织团队和结构的方式(参见康威定律)。这个划分是否是你真正想要的/正确的是另一个问题。在其他组织中,您可能是“IT部门”或更一般的职位,在这种情况下,您可能会对如何建模和组织事物有更多的控制

如果我在一个应用程序(部署单元)中有多个有界上下文,并且一个客户端(例如UI)同时需要来自多个上下文的信息,那么我是否应该创建一个新的应用程序服务来支持此场景

正如@plalx在评论中提到的,您可以在客户端或服务器端进行聚合。设想一个包含3个小部件的页面,其中每个小部件对不同的上下文进行AJAX调用(如果将它们拆分),并以这种方式组合UI。或者,您可以聚合服务器端,即为所讨论的UI提供某种读取模型

一个应用程序中可以有多个有界上下文吗

您可以选择在单个应用程序中组织多个有界上下文,选择名称空间/文件夹之类的内容来分隔它们:

/domain
/主张
/Policy.cs
/检查
/Policy.cs
/承保
/Policy.cs

(此“策略”示例来自DDD)

这种方法的优点是简单,但也有许多缺点:

  • 更可能导致上下文之间的流血和污染-维护边界需要很多规则,因为如果对象都在同一个项目中,则很容易引用另一个上下文中的对象
  • 如果有多个团队在应用程序上工作,则更难管理
  • 在部署方面选择较少(可能不是问题)
如果是这样,那么什么决定了一个上下文是应该与另一个上下文一起部署,还是应该作为一个独立单元部署

你必须考虑把它们放在一个应用程序中的优点和缺点,而不是拆分它们。有些我已经在上面提到过了,但是还有其他的事情要考虑。 不同的上下文是否有不同的非功能性需求?i、 e.扩展、性能需求等?如果是这样,您将希望能够单独部署它们,因此它们不应该是同一应用程序的一部分

您是否受到可选择的技术或可部署到的服务器的任何限制?可能存在一些限制,使其更难转向更微服务风格的体系结构

这个问题还有一个组织因素,这取决于你所在的组织类型。您是否有多个团队在您的系统上工作?如果你在一个以IT为主要业务的组织中工作,你会经常发现该企业已经为你做出了一些决策,通过他们根据上下文组织团队和结构的方式(参见康威定律)。这个划分是否是你真正想要的/正确的是另一个问题。在其他组织中,您可能是“IT部门”或更一般的职位,在这种情况下,您可能会对如何建模和组织事物有更多的控制