【问题标题】:Navigation Property and repository usage导航属性和存储库使用
【发布时间】:2013-12-26 21:12:26
【问题描述】:

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

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

【问题讨论】:

    标签: domain-driven-design ddd-repositories


    【解决方案1】:

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

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

    如果您遵循“不引用其他聚合根”,请选择选项 2,因为您引用的是设备的 id 并且导航不可行。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多