代码之家  ›  专栏  ›  技术社区  ›  mirezus

使用viewmodels和对system.web.mvc的引用是否违反了mvc模式?

  •  6
  • mirezus  · 技术社区  · 14 年前

    我在博客和书籍中都看到过,作者告诉您在模型项目中添加特定于视图的视图模型作为底层模型对象的包装。这样做的目的是使它非常简单,并且在进行视图的模型绑定时具有针对性。下面是一个很好的例子: Rendering and Binding Drop Down Lists using ASP.NET MVC 2 EditorFor

    然而,现在我的模型中有了对system.web.mvc的引用,这让我有点恼火,否则可能会被用于多个出口(可能是wcf api、silverlight等),但现在我有了对MVC dll的特定引用,这些引用将使我的模型项目得以构建。

    我的问题是:当我们开始添加时,这是否违反了MVC模式? IEnumerable<SelectListItem> 去我们的模特班?有没有一个可行的替代层来移动它,以及如何移动,即控制器?

    感谢您的任何想法或评论。

    3 回复  |  直到 14 年前
        1
  •  6
  •   Fenton    14 年前

    我个人只在视图中从我的模型中更可用的IEnumerable列表中动态创建选择列表,这意味着我的模型没有与选择列表、选择列表项或MVC特定的任何内容相关的任何内容。

    如承诺的示例-使用所有普通视图引擎位在视图中创建selectlist…

    <%= Html.ListBox("SelectedStuff", 
            new SelectList(Model.SomeOptions, "id", "name", Model.SelectedStuff)) %>
    
        2
  •  3
  •   John Farrell    14 年前

    当我们 开始添加 对我们的 模型类?

    不是这样,但是如果您试图使用域驱动的设计,或者在业务层和MVC/表示层之间分离关注点,那么这是一种违反。

    • 模型是你的实体,你的 域,您的业务层对象。

    • 视图模型是你的屏幕,窗体 过账,显示数据桶。

    模型映射到可以包含MVC相关项的视图模型。如果是这样的话,视图模型直接用于MVC。模型可以用于服务、WinForm、WPF或业务系统的任何编程表示。

        3
  •  1
  •   dotjoe    14 年前

    不,视图模型应该由视图使用,并且应该位于Web项目中。但是,您的实际模型不应该引用MVC或Web项目。把你的视图模型看作是在你的模型和视图之间架起一座桥梁。