C# 对于视图模型,继承被认为是安全的吗

C# 对于视图模型,继承被认为是安全的吗,c#,asp.net,asp.net-mvc,asp.net-mvc-4,viewmodel,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Viewmodel,我有一些创建和编辑具有公共属性的视图模型。我在网上读到,对视图模型使用继承是有害的。因此,我想了解拥有这些类型的视图模型是否安全 public class CustomerVM { public int CustomerId {get;set;} public string Name { get; set;} } public class CustomerCreateVM : CustomerVM { public dictionary<string,string>

我有一些创建和编辑具有公共属性的视图模型。我在网上读到,对视图模型使用继承是有害的。因此,我想了解拥有这些类型的视图模型是否安全

public class CustomerVM
{
   public int CustomerId {get;set;}
   public string Name { get; set;}
}

public class CustomerCreateVM : CustomerVM
{
   public dictionary<string,string> ModelCustomers { get; set;}
}

public class CustomerEditVM : CustomerVM
{
   public List<Orders> OrdersList {get;set;}
}
公共类CustomerVM
{
public int CustomerId{get;set;}
公共字符串名称{get;set;}
}
公共类CustomerCreateVM:CustomerVM
{
公共字典模型客户{get;set;}
}
公共类CustomerEditVM:CustomerVM
{
公共列表顺序列表{get;set;}
}

CustomerVM未在应用程序中使用,它仅用于存储公共属性。

的参数:

“最佳实践”理念正越来越倾向于“胖模特”。因此,模型驱动设计是一种优势。因此,有排列和抽象是可取的

反对的论点:

由于模型实际上是用于将数据传递给视图的,所以简单性是最好的。这符合“控制器主导逻辑”的思想

摘要: 绝对不是邪恶

还不错。推荐与否取决于您是追求“胖”复杂模型/“瘦”控制器,还是追求用于数据处理的简单(非复杂)模型


我个人倾向于简化模型。但我已经看到了足够多的谜团控制器来欣赏它的另一面。

俗话说“偏爱组合而非继承”。在CustomerEdit上拥有CustomerVM属性比以这种方式使用继承更好。在您发布的简单案例中,我认为这并不重要,但是随着系统的发展,如果您习惯于使用继承,那么随着模型的复杂性和层次结构的深度的增加,事情可能会变得越来越糟糕

只要视图模型有一个定义良好的范围和职责,我就不会有任何问题(而且我也不会想到任何技术限制)。然而,这个问题你可以得到十几个不同的答案。是的,我试着在网上搜索这个。认为这不合适的帖子是在暗示组合而不是继承。但我不知道如何在这里使用组合,我想知道继承的真正问题。对于这种东西,没有银弹。通常我所有的viewmodel都继承自NotificationObject——Prism框架。我有时会创建基本视图模型,以反映共性,但非常罕见,而且会小心处理。我喜欢尽可能独立的每个视图模型只要属性在视图中使用相同的方式,我就不会有问题。@DaveA,我将为下一个代码帖子考虑它。原因是我不喜欢构图,与对象直接相关的属性将类似于ObjuCurv.CuMuleCurraveM.Mudio客户,但是对于继承,它将是ObjCuuleCurraveV.Mudio客户。