聚合根是否有依赖关系
本文关键字:依赖 关系 是否 | 更新日期: 2023-09-27 17:50:31
在Eric Evan的书《领域驱动设计》(人们通常称之为"DDD的最佳示例")中,有许多实现特定请求的聚合根(主要是领域模型甚至实体)的示例。
让我们看下面的例子:
public Car : IAggregateRoot {
public List<Wheel> Wheels { get; set; }
public void ReplaceWheels();
}
为了替换轮子,我必须从GarageService请求一组新的轮子,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。
如果Invoice不是聚合根,Invoice行项将有它们自己的存储库。
如果您从不需要在汽车的上下文中处理车轮,那么您的示例看起来很好。唯一的问题是这辆车能更换自己的轮子吗?