【发布时间】:2018-02-06 05:39:10
【问题描述】:
我的英语不好,所以我举两个例子。在这个例子中,让我们从 DDD 中删除一些甚至重要的东西,主要的是事情的本质。
从 DDD 的角度来看如何做?
我们有两个聚合根,Seller 和 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
}
}
2.
另一种变体,客户端层可以直接从聚合Advert 调用方法changeName 和changeCost。我多次看到这个实现。
//Client layer call advert.changeName(name)
//AR Advert
class Advert{
name
cost
changeName(name){
this.name = name
}
changeCost(cost){
this.cost = cost
}
}
您如何看待这些选项?它们都对 DDD 有效吗
执行?从 DDD 的角度来看,哪一个更正确和合乎逻辑?
谢谢!
【问题讨论】:
标签: architecture entity domain-driven-design aggregateroot