解决两难问题

时间:2011-03-31 20:57:27

标签: domain-driven-design dns

我有Person聚合,其中Address是part和vo,但现在我有另一个汇总付款,其中有另一个VO PaymentInfo,其中包含Creditacard号码和其他详细信息,但现在我需要在PaymentInfo VO中的账单地址和送货地址。现在,由于地址是人的不可分割,我不能使用它。

所以我做了什么,

  1. 在付款汇总中创建单独的地址Vo,并将其用作帐单邮寄地址和送货地址。

  2. 将地址移至单独汇总并在PaymentInfo和Person中引用它。

  3. 在Person中创建两个地址,并在PaymentInfo Vo中引用它。

  4. 请帮助我?

2 个答案:

答案 0 :(得分:2)

重要的是 - value objects have no identity 这意味着 - 它们可以轻松地在实体之间共享。

我的意思是 - 不应该分享特定的实例,而是他们的类,键入Address而不是“英国,伦敦街道',无论'16'。值对象实例应该永远不会共享(再次 - 因为他们没有身份,他们的状态是定义他们的状态)。

所以在你的位置 - 我会确保Address作为一个概念对于人和支付信息(它们必须具有相同的结构)相互普遍存在,将其移动到正确的文件夹/命名空间中以便我可以看到它是共享并将其用于两个实体。

如果它们无处不在,我会将Address重命名为PersonAddress并创建第二个 - PayerAddress(根据您正在建模的业务,名称可能会有所不同。)

从提供的链接中引用杰夫:

  

2个聚合根引用同一个实体没有问题 - 它们只是不能引用另一个聚合的内部。对于更简单的值对象,它是不同的。考虑如何在课堂上多次引用日期,例如“2010年8月20日”。

答案 1 :(得分:0)

我将无处不在。不要将人员地址类引用到账单地址和送货地址..

可以轻松实现两件事。一个是业务分析师可以获得的沟通效益,其次是编码将是明确且易于理解的。