可以在两个不同的域中复制/保留相同的信息吗?

时间:2015-02-24 00:59:23

标签: domain-driven-design

我的应用程序中有两个共享相同客户端概念的域。其中一个域是"目录组件",它负责拥有与客户相关的所有详细信息(即:国家/地区,电话号码等)。另一个域是"提供组件",它负责在系统中提供与提供建模相关的所有细节。

客户端存在于两个域中,并且该国家最初仅用于"目录组件"。新要求意味着在"优惠组件"中使用客户的国家/地区。

在我们的CRUD过程中,我们有一个业务逻辑,可以在所有适当的组件中编排客户端的创建(在本例中为目录和商品)。

我们面临两个选择:

  1. 在CRUD过程中,将国家/地区推送到"优惠组件"并将其保存在自己的数据库中。这样做的缺点是在更新客户端的国家时必须同步多个组件中的数据(是的,它可以发生)
  2. 继续将国家/地区保留在"目录组件"只有,并依靠域顶部的服务来收集客户的国家并将其传递给"优惠组件"在某些商业案例中需要时。
  3. 我们决定选择1,但自从我开始阅读Eric Evans关于DDD的书(我仍然是这个主题的新手),我质疑我们做出的决定。

    对此有意见的人吗?

    注意:由于应用程序的设计方式,删除在多个组件中编排CRUD创建的服务不是一种选择。

1 个答案:

答案 0 :(得分:2)

使用DDD,您应该将每个有界上下文分开。这可能导致对类似命名的类建模,并且在两个BC中可能存在一些共同属性。系统之间的任何同步/通信和类似实体的创建都可以使用应用程序级别的机制保持最新。这可以是Web服务或类似ESB(企业服务总线)的东西。如果需要,每个系统都是完整的并拥有自己的持久性数据源(数据库)。应用程序级别的每个系统都不应插入另一个系统的数据库。允许从另一个BC或外部系统直接进行数据库操作,绕过可能存在的任何业务逻辑。

两本主要DDD书中给出的例子表明,对于像客户这样的概念,每个单独的有界上下文中的需求会有所不同,并且要求客户在每个BC中以不同方式建模并允许单独进化。