Domain driven design 导航属性和存储库使用
我对以下几点有点困惑。我应该使用导航属性到达我想要到达的地方,还是应该询问存储库?例如:我有下面的课程Domain driven design 导航属性和存储库使用,domain-driven-design,ddd-repositories,Domain Driven Design,Ddd Repositories,我对以下几点有点困惑。我应该使用导航属性到达我想要到达的地方,还是应该询问存储库?例如:我有下面的课程 public class Vehicle { public IList<Equipment> Equipment { get; set; } } public class Equipment { //.. Properties.. } 公共级车辆 { 公共IList设备{get;set;} } 公共级设备 { //…财产。。 } 就DDD而言,建议采用什么方式获取与专
public class Vehicle
{
public IList<Equipment> Equipment { get; set; }
}
public class Equipment
{
//.. Properties..
}
公共级车辆
{
公共IList设备{get;set;}
}
公共级设备
{
//…财产。。
}
就DDD而言,建议采用什么方式获取与专用车辆相关的设备
备选案文1:
向存储库请求车辆并从导航属性中获取设备
public class VehicleService {
public IEnumerable<Equipment> GetVehicleEquipment(int vehicleId)
{
var vehicle = _repository.Get(vehicleId);
return vehicle.Equipment;
}
}
公共级车辆服务{
公共IEnumerable GetVehicleEquipment(int vehicleId)
{
var vehicle=_repository.Get(vehicleId);
返回车辆、设备;
}
}
备选案文2:
制定专门的存储库方法,以便能够为特定车辆请求设备
公营车辆服务{
public IEnumerable<Equipment> GetVehicleEquipment(int vehicleId)
{
return _repository.GetEquipment(vehicleId);
}
}
public IEnumerable GetVehicleEquipment(int vehicleId)
{
返回存储库。获取设备(车辆ID);
}
}
如果Vehicle是聚合根,Equiment是本地实体或值对象,则选择选项1,因为只有聚合才有其存储库
如果Equiment也是一个聚合根,并且您不介意您的聚合根引用其他聚合根,那么选项1和选项2都可以。但在这种情况下,选项2似乎是多余的
如果您遵循“不引用其他聚合根”,请选择选项2,因为您引用的是设备的id,并且导航不可行
public class Vehicle
{
public IList<Guid> EquipmentIds { get; set; }
}
公共级车辆
{
公共IList设备ID{get;set;}
}