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