我最近在阅读有关ViewModel及其优点的文章。我能够理解为什么需要它,但是我的问题是如果我有两个类用于同一个对象(即Person类),我不会使代码冗余吗?此外,由于您需要确保基类模型和视图模型具有相同数量的属性,因此不会使将来的更改变得有点困难吗?例如,假设我有一个名为Person的表,其中有
我正在创建一个用于创建NHibernate映射的hbm。我有以下模型类
public class Person {
public int ID {get;set;}
public string Name {get;set;}
public string color {get;set;} }
如果我是正确的,视图模型类应该看起来像
public class PersonViewModel {
[DisplayName("Full Name")]
public string Name {get;set;}
[DisplayName("Favourite Color")]
public string color {get;set;}
}
首先,我有两个classess引用db中的同一个对象。即使一个类用于DB目的而另一个用于View目的,我们仍然有两个具有完全相同元数据的类。其次,如果我在db中引入一个新字段,我需要在三个位置添加它,Base Model类,View Model Class和HBM文件。
如果我错了,请纠正我,这怎么可以称为代码优化或最佳实践。
答案 0 :(得分:1)
这取决于您希望采用的方法,您可以直接将模型公开为视图模型的属性,以避免违反DRY原则。但是,这会违反Demeter法则,因此您必须平衡这一点,因为您的视图现在将与您的域模型更紧密地结合。
此外,在验证方面,如果直接公开模型,则需要注意,即使您未在视图中直接使用该属性,最终用户也可以设置任何公开的属性。您也更有可能在每个视图中具有不同的验证要求,在这种情况下,验证将是视图模型的关注点。
这就是为什么一般的最佳做法是不将您的域模型直接暴露给视图。您可以使用AutoMapper等框架来减少层之间的数据传输管道代码。