导航属性和存储库用法

时间:2013-12-26 21:12:26

标签: domain-driven-design ddd-repositories

我对以下内容感到有些困惑。我应该使用导航属性来获取我想去的地方,还是应该问存储库?例如:我有以下课程

public class Vehicle
{
   public IList<Equipment> Equipment { get; set; }
}

public class Equipment
{
 //.. Properties..
}

就DDD而言,建议如何获得与单车相关的设备?

选项1: 向导航库询问车辆并从导航属性中抓取设备

public class VehicleService {

    public IEnumerable<Equipment> GetVehicleEquipment(int vehicleId)
    {
        var vehicle = _repository.Get(vehicleId);
        return vehicle.Equipment;
    }
}

选项2: 制作专门的存储库方法,以便能够为特定车辆索取设备     公共类VehicleService {

         public IEnumerable<Equipment> GetVehicleEquipment(int vehicleId)
        {
            return _repository.GetEquipment(vehicleId);
        }
}

1 个答案:

答案 0 :(得分:0)

如果Vehicle是聚合根且Equiment是本地实体或值对象,则选择option1,因为只有聚合具有其存储库。

如果Equiment也是聚合根,并且您不介意您的聚合根引用其他聚合根,那么选项1和选项2都可以。但在这种情况下,Option2似乎是多余的。

如果您遵循“不引用其他聚合根”,请选择Option2,因为您引用了equipement的id而导航不可行。

public class Vehicle
{
   public IList<Guid> EquipmentIds { get; set; }
}