gpt4 book ai didi

c# - 聚合根应该有依赖关系吗?

转载 作者:太空狗 更新时间:2023-10-29 20:33:46 27 4
gpt4 key购买 nike

在 Eric Evan 的“领域驱动设计”一书中(人们常称其为“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 作为聚合根的依赖注入(inject)是否正确?还是我最好只通过 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。

如果发票不是聚合根,发票行项目将有自己的存储库。

如果您永远不必在汽车环境之外使用轮子,那么您的示例看起来不错。唯一的问题是汽车可以更换自己的轮子吗?如果不是,则该方法可能位于错误的位置。

关于c# - 聚合根应该有依赖关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22449597/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com