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;}
}