在 DDD 中,实体具有唯一标识它们的值,即标识。有时这个身份是由服务器生成的,有时是从另一个 BC 获得的,有时是由用户提供的,等等。假设我们在用户提供身份的场景中工作。
让我们假设有一个业务流程专门在纸上完成并且不会很快迁移到计算机,流程所有者决定了一个称为资源的事物的新名称。该名称始终遵循固定模式PROD-<today's date>-<short random string>
,并且始终在非常重要的团队成员之间进行验证。选择和验证的名称是PROD-2021-01-04-KAH14564YUDO
,最后一个字符是“O”(字母)而不是“0”(数字)。
假设操作员在系统中注册了这个新资源,提供了给定的身份,但错误地将最后一个字符拼成了零,可能是因为笔迹不好。实体被插入,其他一些实体通过其身份链接到它,然后有人检测到身份中的错误。现在应该怎么办?
我们知道 Entity 的身份应该是唯一且不可变的,但在这里似乎我们需要更正(并因此更改)它。引入代理身份来避免这种错误的插入问题是不正确的,因为由 PO 提供并由非常重要的团队成员验证的身份实际上是唯一的并且不能更改,它只是在管理系统中插入错误;此外,在业务中没有与资源相关的代理身份的概念。
这种情况下的错误在哪里?