我一直在研究洋葱建筑几天。我知道依赖关系应始终走向中心,以及如何使用依赖注入来实现这一目标。但是我还有几个问题我还是想不通。
模型(或实体)可以引用存储库接口或服务接口吗?
例如:Order
实体通过DeliveryCity
属性建立Oder.DeliveryZip
关系,不外键,但是唯一。要获得拉链城市,我必须致电ICityRepository.FindByZip(zip)
我的模型中有以下代码
class Order
{
. . .
[Inject]
public ICityRepository CityRepository { get; set; }
private City _dCity;
public City DeliveryCity {
get {
if (_dCity == null)
_dCity = this.CityRepository.FindByZip(this.DeliveryZip);
return _dCity;
}
}
. . .
}
上述代码会出现什么问题?它应该使用域名服务吗?
是否应在核心内部或基础架构层中定义域服务实现?
答案 0 :(得分:5)
上述代码会出现什么问题?它应该使用域名服务吗?
这里要考虑两件事:
答案 1 :(得分:5)
这是工厂适应领域的地方。 OrderFactory可以采用依赖关系,例如对IOrderRepository的依赖关系以及对ICityRepository的依赖关系。当工厂用于创建(或重组)Order实体时,工厂可以查找City并相应地设置Order属性。或者,正如herzmeister建议的那样,使用Lazy设置它,因此只在需要时才执行查找。
答案 2 :(得分:0)
怎么样
private Lazy<City> _dCityLazy;
public City DeliveryCity {
get {
return _dCityLazy.Value;
}
}
您是否通过某种机制注入Lazy<City>
?
您可以在此示例中通过外部注射灵活决定。
我说这实际上取决于特定域名服务的用途和使用位置。