1

我最近在阅读有关 ViewModel 及其优势的文章。我能够理解为什么需要它,但是我的问题是如果我有两个用于同一个对象的类(即 Person 类),我不是让代码变得多余吗?由于您需要确保基类模型和视图模型具有相同数量的属性,这是否不会使未来的更改变得有点困难,对吗?例如,假设我有一个名为 Person 的表

  1. ID
  2. 姓名
  3. 颜色

我正在创建一个用于为 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;}
}

首先,我有两个类引用数据库中的同一个对象。即使一个类用于 DB 目的而另一个用于 View 目的,我们仍然有两个类具有完全相同的元数据。其次,如果我在 db 中引入一个新字段,我需要在三个地方添加它,Base Model 类、View Model 类和 HBM 文件。

如果我错了,请纠正我,这怎么能称为代码优化或最佳实践。

4

1 回答 1

1

这取决于您希望采用的方法,您可以将模型直接公开为视图模型的属性,以避免违反 DRY 原则。但是,这将违反得墨忒耳定律,因此您必须平衡这一点,因为您的视图现在将与您的域模型更紧密地耦合。

此外,在验证方面,如果您直接公开模型,那么您需要注意任何公开的属性都可能由最终用户设置,即使您没有直接在视图中使用该属性。您也更有可能对每个视图有不同的验证要求,在这种情况下,验证将是视图模型的关注点。

这就是为什么一般的最佳实践不是将您的域模型直接暴露给视图的原因。您可以使用AutoMapper等框架来减少层之间的数据传输管道代码。

于 2013-05-22T09:54:57.203 回答