聚合根需要依赖吗?
在埃里克埃文的“域驱动设计”一书中(人们经常称这是“DDD最好的例子”),有很多聚合根源(主要是域模型甚至实体)的例子满足了某些请求。
我们来看下面的例子:
public Car : IAggregateRoot {
public List<Wheel> Wheels { get; set; }
public void ReplaceWheels();
}
为了更换车轮,我必须从GarageService请求一组新的车轮,它本身从WheelRepository收集车轮。 在一种情况下,我不是一个客户,而是一个替换车轮的车库所有者/机械师,所以感觉很自然:
myCar.ReplaceWheels();
// I'm a domain expert! I have the capabilities to replace the wheels
我的问题是:注入WheelService作为聚合根的依赖关系是否正确? 或者我应该只通过WheelService来谈谈吗?
public class MyCar : IAggregateRoot {
private readonly IWheelService _wheelService;
public List<Wheel> Wheels { get; set; }
public MyCar(IWheelService wheelService) {
this._wheelService = wheelService;
}
public void ReplaceWheels() {
this.Wheels = _wheelService.getNewSet();
}
}
要么
myWheelService.getNewSet(Car car);
聚合根很可能有依赖关系。 例如,如果您有一个Invoice聚合根实体,则可能会有一个LineItem集合。 编辑订单项的唯一方法是使用InvoiceRepository。
如果发票不是聚合根,则发票行项目将具有其自己的存储库。
你的例子看起来很好,如果你不需要在车外环境下使用车轮。 唯一的问题是汽车可以更换自己的车轮吗? 如果不是,该方法可能位于错误的地方。
链接地址: http://www.djcxy.com/p/19479.html