聚合根需要依赖吗?

在埃里克埃文的“域驱动设计”一书中(人们经常称这是“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

上一篇: Should aggregate roots have dependencies?

下一篇: Elevator algorithm for minimum distance