【发布时间】:2014-04-22 09:02:33
【问题描述】:
在 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 作为聚合根的依赖项注入是否正确?还是我最好只通过 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);
【问题讨论】:
-
它们是您解释 Aggregate Root 概念的方式,它看起来像一个 Entity(或 Value Object)。如果是这样,它可能不应该有依赖关系:stackoverflow.com/a/4836790/126014
-
@MarkSeemann 这意味着实体永远不能被视为聚合根,只有域服务?
-
是什么让你得出这样的结论?
标签: c# dependency-injection domain-driven-design service-layer