我有Person聚合,其中Address是part和vo,但现在我有另一个汇总付款,其中有另一个VO PaymentInfo,其中包含Creditacard号码和其他详细信息,但现在我需要在PaymentInfo VO中的账单地址和送货地址。现在,由于地址是人的不可分割,我不能使用它。
所以我做了什么,
在付款汇总中创建单独的地址Vo,并将其用作帐单邮寄地址和送货地址。
将地址移至单独汇总并在PaymentInfo和Person中引用它。
在Person中创建两个地址,并在PaymentInfo Vo中引用它。
答案 0 :(得分:2)
重要的是 - value objects have no identity 这意味着 - 它们可以轻松地在实体之间共享。
我的意思是 - 不应该分享特定的实例,而是他们的类,键入Address
而不是“英国,伦敦街道',无论'16'。值对象实例应该永远不会共享(再次 - 因为他们没有身份,他们的状态是定义他们的状态)。
所以在你的位置 - 我会确保Address
作为一个概念对于人和支付信息(它们必须具有相同的结构)相互普遍存在,将其移动到正确的文件夹/命名空间中以便我可以看到它是共享并将其用于两个实体。
如果它们无处不在,我会将Address
重命名为PersonAddress
并创建第二个 - PayerAddress
(根据您正在建模的业务,名称可能会有所不同。)
从提供的链接中引用杰夫:
2个聚合根引用同一个实体没有问题 - 它们只是不能引用另一个聚合的内部。对于更简单的值对象,它是不同的。考虑如何在课堂上多次引用日期,例如“2010年8月20日”。
答案 1 :(得分:0)
我将无处不在。不要将人员地址类引用到账单地址和送货地址..
可以轻松实现两件事。一个是业务分析师可以获得的沟通效益,其次是编码将是明确且易于理解的。