Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Domain driven design 解决困境_Domain Driven Design_Dns - Fatal编程技术网

Domain driven design 解决困境

Domain driven design 解决困境,domain-driven-design,dns,Domain Driven Design,Dns,我有个人聚合,其中地址是部分和vo,但现在我有另一个聚合付款,其中有另一个vo PaymentInfo,其中包含诸如Creditacard号码和其他详细信息的详细信息,但现在我需要PaymentInfo vo中的账单地址和发货地址。既然地址是人的组成部分,我就不能用它了 所以我所做的 在付款聚合中创建单独的地址Vo,并将其用作帐单地址和发货地址 将地址移入以分离聚合并在PaymentInfo和Person中引用它 亲自创建两个地址,并在PaymentInfo Vo中引用 请帮帮我?这里最重要的是

我有个人聚合,其中地址是部分和vo,但现在我有另一个聚合付款,其中有另一个vo PaymentInfo,其中包含诸如Creditacard号码和其他详细信息的详细信息,但现在我需要PaymentInfo vo中的账单地址和发货地址。既然地址是人的组成部分,我就不能用它了

所以我所做的

  • 在付款聚合中创建单独的地址Vo,并将其用作帐单地址和发货地址

  • 将地址移入以分离聚合并在PaymentInfo和Person中引用它

  • 亲自创建两个地址,并在PaymentInfo Vo中引用

  • 请帮帮我?

    这里最重要的是-。
    这意味着,它们可以很容易地在实体之间共享

    我的意思是-不应该共享特定的实例,而是应该共享它们的类,键入
    Address
    ,而不是“UK,London street”或“16”。值对象实例应该永远不被共享(同样-因为它们没有标识,它们的状态是定义它们的因素)


    因此,在您的位置上-我会确保
    地址
    作为一个概念,对于个人和支付信息来说都是普遍存在的(它们必须具有相同的结构),将其移动到正确的文件夹/命名空间中,这样我就可以看到它是共享的,并将其用于两个实体

    如果它们不是普遍存在的,我会将
    地址
    重命名为
    个人地址
    ,并创建第二个-
    支付地址
    (名称可能因您正在建模的业务而异)

    从提供的链接中引用Jeff的话:

    两个聚合根引用同一实体没有问题-它们只是不能引用另一个聚合的内部。对于更简单的值对象则不同。考虑你可以如何引用日期,比如“2010年8月20日”,在你的类中的任何次数。
    我会赞同它无处不在的本质。不要将Person address类引用到帐单地址和发货地址


    有两件事是很容易做到的。一是您可以从业务分析师那里获得的沟通优势,二是编码将是明确的和可理解的。

    将其移动到正确的文件夹/名称空间中,这样我就可以看到它是共享的,并将其用于两个实体。“和”2个聚合根引用同一个实体”没有问题。你是说在共享文件夹中,但address也需要其他类,如country和city?在DDD术语中,这将被称为a。一组核心(通常是值)对象,在有界上下文之间没有差异。