在两个有界上下文之间放置一个共同的价值对象?

时间:2017-07-23 04:24:02

标签: domain-driven-design

我试图在一个小项目中应用域驱动设计 我想分开其余用户逻辑的身份验证, 我在开始时使用值对象作为id(userID)我在用户的同一级别(包)中有userID但是我意识到当我为认证和用户分离有界上下文时,它们共享一个共同的值userID的对象,所以我的问题是,我必须放置common或share value对象?如果我创建了一个名为commons的包,那是正确的吗?

3 个答案:

答案 0 :(得分:4)

建议不要在有界上下文之间共享模型,但是,您可以共享ID甚至简单的Value对象(如Money)。

一般规则是你可以共享任何不可变的东西或者很少变化,而且很少改变结构(这里不变性指的是源代码和值不变性)。

答案 1 :(得分:0)

名为“common”的包通常是指您在项目中使用的可重用概念,因此您不必在每个项目中对它们进行编码。通常会为实体,值对象等放置基本抽象对象和接口。

但是关于userId不是你的情况。你要说的是将userId放在“共享内核”模型中。这是一个选项,但通常不推荐。

从我的观点来看:

auth BC具有概念id,登录名,密码,角色等。

用户BC有名称,姓氏,地址,年龄等概念,但它也必须具有从auth BC获得的id。

据我所知,您有两种选择:

(1)认证BC是共享内核。所以userId是共享的,它也属于用户BC。

(2)认证BC是通用BC。因此,您必须将用户BC与auth BC集成以从中获取id。

答案 2 :(得分:0)

首先,我个人认为这是代码级别的上下文映射问题,在这里您实际上希望在多个有界上下文之间拥有一个共享内核。

这取决于业务。您通常需要考虑以下问题:

  • 负责每个有限上下文的不同团队如何相互协作?如果只有一个团队维护所有相关的有界上下文,那就可以了,但是如果多个团队的目标不同,那么将导致下一个问题。
  • 您如何计划随着时间的推移维护此共享内核?通常,将需要更改此共享内核以适应业务变化。

有关更详细的论点,有很多有关上下文映射的资源,例如Vaughn Vernon的书“实现域驱动设计”。