【问题标题】:What kind of data belongs in a view model?什么样的数据属于视图模型?
【发布时间】:2010-05-04 18:45:46
【问题描述】:

“视图模型”这个名称表明它为视图建模数据。这很明显。视图模型中还可以或应该包含哪些内容?

例如,视图可能会显示购物车中的商品列表、客户信用卡信息字段和客户账单信息字段。视图模型可能包含所有这些的属性,或者它可能只包含购物车项目的属性。

【问题讨论】:

    标签: model-view-controller viewmodel


    【解决方案1】:

    视图模型是代表视图显示/修改的字段的类。因此,例如,如果您要在同一页面上显示购物车和客户的信用卡,这些属性都应该属于视图模型。

    如果视图要显示日期名称的下拉列表,您甚至可以在视图模型中放置这样的属性:

    public IEnumerable<SelectListItem> DayNames
    {
        get
        {
            return CultureInfo
                .CurrentCulture
                .DateTimeFormat
                .DayNames
                .Select((dayName, index) => new SelectListItem 
                { 
                    Value = index.ToString(),
                    Text = dayName
                });
        }
    }
    

    【讨论】:

    • 输入字段开始为空怎么办?该数据将通过模型绑定器提供给提交操作。这是否意味着提交操作应该接收视图模型?
    • 是的,提交操作应该接收一个视图模型,该视图模型将映射到一个域模型,该域模型将被处理到数据访问层。
    【解决方案2】:

    您如何准确地使用您的视图模型是一个判断要求。一位开发人员可能拥有更少的类型化 ViewModel,因此它们可以被重用。另一个开发人员可能有更多的 ViewModel,每个都更小,更具体到特定的操作。另一位开发人员可能会更多地依赖 ViewData。

    如果可能,让您的视图模型组织良好,只包含视图所需的内容,并且主要由轻量级实体对象组成。如果你有一个复杂的视图,不要害怕制作一个高度定制的视图模型类,这将有助于简化视图逻辑。制作包含少量未使用数据的可重用 ViewModel 是可以的,但要避免只使用一些千篇一律的 ViewModel。 ViewModel 应该只有该视图所需的数据或非常接近的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 2013-09-11
      相关资源
      最近更新 更多