小编Yur*_*kov的帖子

DDD 中聚合根的行为是否应该作为参与者?

我的英语不好,所以我举两个例子。在这个例子中,让我们从 DDD 中删除一些更重要的东西,主要是事情的本质。

如何从 DDD 的角度正确地做到这一点?

我们有两个聚合根,theSeller和 the Advert。在Seller可以编辑Advert这些例子:

1.

模型是否应该反映真实的业务逻辑?然后是Seller必须改变的人Adverts。即客户端层调用方法changeAdvertName()changeAdvertCost()聚合Seller。顺便说一下,这提供了访问检查等优势。我们可以看到Seller只能修改自己的Adverts. 这是第一个选项。

    //Client layer call seller.changeAdvertName(name)

    //AR Seller
    class Seller{
        adverts
        changeAdvertName(advertId, name){
            adverts[advertId].changeName(name)
        }
        changeAdvertCost(advertId, cost){
            adverts[advertId].changeCost(cost)
        }
    }

    //AR Advert
    class Advert{
        name
        cost
        changeName(name){
            this.name = name
        }
        changeCost(cost){
            this.cost = cost
        }
    }
Run Code Online (Sandbox Code Playgroud)

2.

另一种变体,客户端层可以直接调用方法changeNamechangeCost从聚合中调用Advert。我多次看到这个实现。

    //Client layer call advert.changeName(name) …
Run Code Online (Sandbox Code Playgroud)

architecture entity domain-driven-design aggregateroot

2
推荐指数
1
解决办法
1052
查看次数