【发布时间】:2012-02-17 23:11:12
【问题描述】:
假设我们有以下(过于简单)的场景:
我们有一个用于查看人员详细信息的屏幕和一个用于编辑人员详细信息的屏幕。
屏幕显示人员详细信息有以下字段(仅作为显示):
名字 姓 简介
屏幕编辑人员详细信息显示具有以下字段(在输入控件中):
ID(隐藏) 名 姓 简介
假设我们的显示视图模型如下所示:
public class DisplayPersonViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Bio { get; set; }
}
我们的编辑视图模型看起来像这样:
public class EditPersonViewModel
{
[Required]
public int ID { get; set; }
[Required]
[StringLength(20)]
public string FirstName { get; set; }
[Required]
[StringLength(20)]
public string LastName { get; set; }
[Required]
public string Bio { get; set; }
}
两者之间没有太大区别,是吗?编辑模型有一个额外的字段 (ID) 和一些属性上的属性。现在,如果我们要像这样组合 2:
public class DisplayPersonViewModel
{
[Required]
[StringLength(20)]
public string FirstName { get; set; }
[Required]
[StringLength(20)]
public string LastName { get; set; }
[Required]
public string Bio { get; set; }
}
public class EditPersonViewModel : DisplayPersonViewModel
{
[Required]
public int ID { get; set; }
}
这当然更 DRY,因为我们没有要维护的重复字段,但现在我们的显示视图模型上有无关的信息(属性)。无论如何,我更倾向于第二种方法,因为我们的某些屏幕有超过 25 个字段! (...这超出了我的控制范围,所以请不要喋喋不休:)...)但是,我只是想听听意见,以更好地了解什么可能是“最佳实践”。
【问题讨论】:
-
是的,如果您正在开发一个包含许多模型的大型应用程序,每个模型可能有十几个或更多字段,该怎么办?随着应用程序的发展,您会不断添加字段。随着时间的推移,您如何使本质上相同实体的多个视图模型保持同步?
标签: asp.net-mvc model-view-controller architecture viewmodel