该问题涉及您必须更新/删除值对象的情况。
考虑这种情况。
您有一个订单,您有产品,并且产品有 ProductItems。其中 ProductItem 是 ValueObject。如果您必须更新产品中的产品项目列表(假设更新数量),您会怎么做?您将如何确定需要更新的确切 ProductItem?
这是从 OrderingContext 的角度来看,应该有一个支持上下文,其中有 ProductItem 库存和 ProductItem 定价 (InventoryContext),其中 ProductItem 不仅仅是一个 ValueObject,但由于我们位于 OrderingContext 下,如何如果您无法识别 ProductItem,您会更新它吗?
最佳答案
您可以通过所需的任何方式识别列表中的值对象
,对此没有规则。
例如,在这种情况下,识别它的一种方法是使用它在列表中的数字索引。如果您需要更稳定的东西(即在项目重新排序的情况下也适用),您可以使用支持此功能的语言使用 GUID 而不是数字索引。例如,PHP
允许您使用 string
进行数组访问,并且 GUID
可以在用于数组查找。
关于值对象
需要记住的重要规则:它们应该是不可变的,也就是说,如果您需要更新一个实例,那么您可以将其替换为另一个实例。
关于architecture - DDD,如何更改 ValueObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53391249/