【发布时间】:2010-05-04 18:45:46
【问题描述】:
“视图模型”这个名称表明它为视图建模数据。这很明显。视图模型中还可以或应该包含哪些内容?
例如,视图可能会显示购物车中的商品列表、客户信用卡信息字段和客户账单信息字段。视图模型可能包含所有这些的属性,或者它可能只包含购物车项目的属性。
【问题讨论】:
标签: model-view-controller viewmodel
“视图模型”这个名称表明它为视图建模数据。这很明显。视图模型中还可以或应该包含哪些内容?
例如,视图可能会显示购物车中的商品列表、客户信用卡信息字段和客户账单信息字段。视图模型可能包含所有这些的属性,或者它可能只包含购物车项目的属性。
【问题讨论】:
标签: model-view-controller viewmodel
视图模型是代表视图显示/修改的字段的类。因此,例如,如果您要在同一页面上显示购物车和客户的信用卡,这些属性都应该属于视图模型。
如果视图要显示日期名称的下拉列表,您甚至可以在视图模型中放置这样的属性:
public IEnumerable<SelectListItem> DayNames
{
get
{
return CultureInfo
.CurrentCulture
.DateTimeFormat
.DayNames
.Select((dayName, index) => new SelectListItem
{
Value = index.ToString(),
Text = dayName
});
}
}
【讨论】:
您如何准确地使用您的视图模型是一个判断要求。一位开发人员可能拥有更少的类型化 ViewModel,因此它们可以被重用。另一个开发人员可能有更多的 ViewModel,每个都更小,更具体到特定的操作。另一位开发人员可能会更多地依赖 ViewData。
如果可能,让您的视图模型组织良好,只包含视图所需的内容,并且主要由轻量级实体对象组成。如果你有一个复杂的视图,不要害怕制作一个高度定制的视图模型类,这将有助于简化视图逻辑。制作包含少量未使用数据的可重用 ViewModel 是可以的,但要避免只使用一些千篇一律的 ViewModel。 ViewModel 应该只有该视图所需的数据或非常接近的数据。
【讨论】: