C# 域到视图模型设计?

C# 域到视图模型设计?,c#,asp.net-mvc,design-patterns,domain-driven-design,C#,Asp.net Mvc,Design Patterns,Domain Driven Design,我想知道以下产品的最佳设计。我有一些域模型,比如: public class Car { public string Name { get; set; } //Other common properties removed for Brevity } public class DieselCar : Car { public bool RunOnBioDiesel { get; set; } //other diesel specific properties remo

我想知道以下产品的最佳设计。我有一些域模型,比如:

public class Car
{
   public string Name { get; set; }
   //Other common properties removed for Brevity
}
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
}
在我的领域模型中,我也有从汽车继承的燃料特定汽车模型,例如:

public class Car
{
   public string Name { get; set; }
   //Other common properties removed for Brevity
}
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
}
在我看来,目前我只有一个普通的汽车视图模型。使用了一些公共属性,然后根据哪种燃料类型渲染柴油或汽油的局部视图-同样,此局部视图仅采用完整的车视图模型,因为每个局部视图上也有公共属性

然而,与其在控制器中将多个属性从视图模型映射到域,然后在视图模型生成器中将多个属性从域映射到视图模型,我希望利用automapper的优势来实现这一点

然而,我认为这意味着在AutomapperBootstrapper中有一个类似于下面的东西(我不确定这是否能正常工作??)

Mapper.CreateMap();
CreateMap();
CreateMap();
CreateMap();
CreateMap();
CreateMap();
我在想另一种方法是在我的视图模型中为CommonCarFields、DieselCarFields和PetrolCarFields创建三个不同的类,然后在CarViewModel构造函数中新建这些类中的每一个,然后在viewmodel中将每个域模型映射到其对应的类,在AutoMapper中反之亦然


也许有人能提出一种比我所缺少的更好的方法吗?

如果我需要我视图中域模型中的每个属性,我会感到惊讶。在将数据发送到视图或通过导线发送数据时,我倾向于将其展平。我发现,在这两种情况下,如果您在域和视图模型中都保持相同的对象图,然后在两者之间进行虔诚的映射,那么您可能在某个地方做错了什么


每当我构建了一个以应用程序为中心的应用程序时,这种直接映射永远不会自然发生。另一方面,在以数据为中心的应用程序中,我经常看到数据库的结构被错误地每一层都被强制执行。

我会尝试动态映射,您不必事先配置映射。@WiktorZychla-您是否有指向此Wiktor示例的链接,或者您是否可以在回答中使用示例?可能需要重新考虑您的域模型。一旦您尝试添加其他功能,使用继承就会崩溃。@Cerad-不确定您的意思?你能举一个你认为这会“爆炸”的例子吗?好吧,如果你想追踪变速器的类型(手动与自动)。