gpt4 book ai didi

domain-driven-design - 在 DDD 中的值对象上具有 id 字段

转载 作者:行者123 更新时间:2023-12-01 13:48:29 26 4
gpt4 key购买 nike

我正在从事一个项目,在这个项目中,我在聚合中有一个值对象(称为 SkillProfile)。聚合根是 User 实体,User 与其 SkillProfile 具有单向一对一关联。在业务中有一个用例,其中 SkillProfile 可以与另一个 User 共享,但始终作为副本(因此修改其中一个配置文件不会更改任何其他用户资料)。到目前为止一切顺利。

现在企业有了新的要求,即应该可以在报告中看到哪些用户具有相同的技能概况。技能配置文件上的 equals 方法无法满足此要求,因为有些技能配置文件恰好具有相同的值,但在明确执行时并未“共享”。当然,技能配置文件必须不可变的旧要求仍然有效。

所以这是我的问题:在 SkillProfile 类上发明一个新字段“Id”或“SharingCode”是否是个好主意,因此尽管它仍然是一个值对象,但仍赋予它某种身份而不是实体,因为它没有状态或生命周期?

最佳答案

首先,

so modifying one of the profile won't change any of the other users profile

如果 SkillProfile 确实是一个值对象,应该没有修改的可能!在 User 中替换它当然没问题。 (只是为了在讨论您的问题之前弄清楚这一点)


根据新要求,SkillProfile 需要一个标识 - 无论是显式还是隐式 - 因为不能再仅通过查看其值来比较它。 因此,它现在是一个实体。

请注意,与之前的值对象相比,您不需要对它有太大不同 - 例如,保持实体不可变是个好主意,因为这仍然是概念的本质。 所以让它成为一个实体应该不是很大的一步。

关于domain-driven-design - 在 DDD 中的值对象上具有 id 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33855373/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com