【发布时间】:2014-08-17 22:08:23
【问题描述】:
我想知道以下最佳设计。我有类似的领域模型:
public class Car
{
public string Name { get; set; }
//Other common properties removed for Brevity
}
在我的域模型中,我还有从 Car 继承的燃料特定汽车的模型,例如:
public class DieselCar : Car
{
public bool RunOnBioDiesel { get; set; }
//other diesel specific properties removed for brevity
}
public class PetrolCar : Car
{
public int NoSparkplugs { get; set; }
//other petrol specific properties removed for brevity
}
在我看来,目前我只有一个普通的汽车视图模型。使用一些通用属性,然后根据哪种燃料类型为柴油或汽油渲染局部视图 - 同样,此局部视图仅采用完整的 CarView 模型,因为每个局部视图也有通用属性。
但是,我不想将多个属性从视图模型映射到我的控制器中的域,然后将域映射到我的视图模型构建器中的视图模型,我想利用自动映射器来做到这一点。
但是我认为这意味着在 AutomapperBootstrapper 中有类似下面的内容(我不确定这是否能正常工作??)
Mapper.CreateMap<Domain.Car, CarViewModel>();
Mapper.CreateMap<Domain.DieselCar, CarViewModel>();
Mapper.CreateMap<Domain.PetrolCar, CarViewModel>();
Mapper.CreateMap<CarViewModel, Domain.Car>();
Mapper.CreateMap<CarViewModel, Domain.DieselCar>();
Mapper.CreateMap<CarViewModel, Domain.PetrolCar>();
我在想另一种方法是在我的视图模型中为 CommonCarFields、DieselCarFields 和 PetrolCarFields 提供三个不同的类,然后在 CarViewModel 构造函数中新建每个这些类,然后将每个域模型映射到视图模型上的相应类在 AutoMapper 中反之亦然?
也许任何人都可以提出比我想念的更好的方法吗?
【问题讨论】:
-
我会尝试动态映射,您不必提前配置映射。
-
@WiktorZychla - 您是否有此 Wiktor 示例的链接,或者您能否详细说明答案中的示例?
-
可能需要重新考虑您的域模型。一旦您尝试添加其他功能,使用继承就会崩溃。
-
@Cerad - 不确定你的意思?你能举一个你认为这会如何“爆炸”的例子吗?
-
好吧,如果您想跟踪变速箱的类型(手动与自动)怎么办。
标签: c# asp.net-mvc design-patterns domain-driven-design