我的英语不好,所以我举两个例子。在这个例子中,让我们从 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.
另一种变体,客户端层可以直接调用方法changeName并changeCost从聚合中调用Advert。我多次看到这个实现。
//Client layer call advert.changeName(name) …Run Code Online (Sandbox Code Playgroud)