我对以下内容感到有些困惑。我应该使用导航属性来获取我想去的地方,还是应该问存储库?例如:我有以下课程
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);
}
}
答案 0 :(得分:0)
如果Vehicle是聚合根且Equiment是本地实体或值对象,则选择option1,因为只有聚合具有其存储库。
如果Equiment也是聚合根,并且您不介意您的聚合根引用其他聚合根,那么选项1和选项2都可以。但在这种情况下,Option2似乎是多余的。
如果您遵循“不引用其他聚合根”,请选择Option2,因为您引用了equipement的id而导航不可行。
public class Vehicle
{
public IList<Guid> EquipmentIds { get; set; }
}