Domain driven design 有界上下文找到边界了吗?

Domain driven design 有界上下文找到边界了吗?,domain-driven-design,aggregate,bounded-contexts,Domain Driven Design,Aggregate,Bounded Contexts,在我当前的项目(电子商务网站)中,我们有不同的有界上下文,例如:结账过程中的账单、交付或付款 最重要的是,根据客户将购买什么,结账过程将有所不同。因此,根据她的购物车的内容,结帐过程中的步骤可能会有所不同,或者我们不会/将向她询问某些信息 那么,应该为每种不同类型的签出过程创建不同的有界上下文吗 例如,订单聚合根根据签出过程的不同而不同 EticketsOrder(在这种情况下,我们不需要送货地址,因此我们不会向用户索要送货地址) 票务地址 衣物订购(在这种情况下,我们需要一个送货地址,并且在结

在我当前的项目(电子商务网站)中,我们有不同的有界上下文,例如:结账过程中的账单、交付或付款

最重要的是,根据客户将购买什么,结账过程将有所不同。因此,根据她的购物车的内容,结帐过程中的步骤可能会有所不同,或者我们不会/将向她询问某些信息

那么,应该为每种不同类型的签出过程创建不同的有界上下文吗

例如,订单聚合根根据签出过程的不同而不同 EticketsOrder(在这种情况下,我们不需要送货地址,因此我们不会向用户索要送货地址) 票务地址

衣物订购(在这种情况下,我们需要一个送货地址,并且在结帐过程中还有一个额外的步骤来获取此地址) 衣服帐单地址送货地址

这种分离意味着创建两个不同的域实体,即使它们具有相似的属性


对这类问题建模的最佳方法是什么?如何找到语境边界?

有界语境主要是语言边界。引用蓝皮书(突出显示的关键部分):

有界上下文界定了特定模型的适用性 团队成员对发生的事情有一个清晰和共同的理解 保持一致,以及它与其他上下文的关系。在此范围内 上下文,努力保持模型在逻辑上的统一,但不要担心 关于那些界限之外的适用性。在其他情况下,其他 模型适用于不同的术语、概念和规则, 和无处不在的语言的方言

要问的问题是,创建的不同类型的订单是完全不同的聚合,还是它们都是具有不同值的订单聚合。不管他们是如何创建的,是否需要考虑整体的秩序?我曾经构建并使用过电子商务系统,其中不同类型的订单都被建模为同一聚合的实例,只是设置不同,没有语言问题。另一方面,域中的顺序可能不同,足以保证不同的上下文


我经常从BC的角度考虑BC边界。如果您将订单分为两个BC,它们之间是否存在高度耦合?如果是这样的话,这可能是一个迹象,表明它们应该合并为一个BC。另一方面,如果业务连续性系统的唯一交互位置是为了报告目的,则无需将它们组合起来。

有界上下文主要是语言边界。引用蓝皮书(突出显示的关键部分):

有界上下文界定了特定模型的适用性 团队成员对发生的事情有一个清晰和共同的理解 保持一致,以及它与其他上下文的关系。在此范围内 上下文,努力保持模型在逻辑上的统一,但不要担心 关于那些界限之外的适用性。在其他情况下,其他 模型适用于不同的术语、概念和规则, 和无处不在的语言的方言

要问的问题是,创建的不同类型的订单是完全不同的聚合,还是它们都是具有不同值的订单聚合。不管他们是如何创建的,是否需要考虑整体的秩序?我曾经构建并使用过电子商务系统,其中不同类型的订单都被建模为同一聚合的实例,只是设置不同,没有语言问题。另一方面,域中的顺序可能不同,足以保证不同的上下文


我经常从BC的角度考虑BC边界。如果您将订单分为两个BC,它们之间是否存在高度耦合?如果是这样的话,这可能是一个迹象,表明它们应该合并为一个BC。另一方面,如果业务连续性系统的唯一交互位置是为了报告目的,则无需将它们组合起来。

看起来您可能错过了一个有界上下文。当这种情况发生时,人们倾向于尝试将功能融入到现有的BC中。同样的事情也发生在聚合根上。如果某件事情看起来很笨拙或没有意义,试着看看你是否错过了什么

在您的示例中,我建议您使用购物BC(或任何有意义的名称)。您正在尝试将结帐流程与订单BC相适应。您的购物BC将负责收集所有数据,然后将其传送到相关部分

选择的产品类型将决定是否需要实际交付


希望能有所帮助。

看起来您可能错过了一个有界上下文。当这种情况发生时,人们倾向于尝试将功能融入到现有的BC中。同样的事情也发生在聚合根上。如果某件事情看起来很笨拙或没有意义,试着看看你是否错过了什么

在您的示例中,我建议您使用购物BC(或任何有意义的名称)。您正在尝试将结帐流程与订单BC相适应。您的购物BC将负责收集所有数据,然后将其传送到相关部分

选择的产品类型将决定是否需要实际交付


希望这能有所帮助。

感谢您的回复,以及您是如何实施的?有许多条件状态(在视图中…)?还是一个BC->多个viewmodels?感谢您的回复,以及您是如何实现它的?有许多条件状态(在视图中…)?还是一个BC->多个viewmodels?