代码之家  ›  专栏  ›  技术社区  ›  Faizan S.

在控制器中使用FormViewModel与在模型中使用分部模型类的好处

  •  0
  • Faizan S.  · 技术社区  · 15 年前

    我很难理解当前ASP.NET MVC应用程序中两种设计方法的长期可扩展性。

    我用于提供数据的ORM是 Linq2SQL . 就是这样 太神了 一起工作,顺便说一句!

    现在,我在为视图设计模型类时遇到了一些问题。目前我有一个 partial class 对于数据库中的每个实体。

    • 这种方法允许我扩展类,而不必切换 strongly typed 以我的观点为榜样
    • 我可以很容易地为额外的数据添加更多的属性(主要是元数据)
    • 我可以很容易地添加帮助器方法来填充列表和/或执行其他数据事务。
    • 还有一个问题:
      • 我无法创建自定义 constructor 因为这已经由 LIQ2SQL

    在阅读了 ASP.NET MVC Book 还有一些教程,我看到了 FormViewModels 用于提供对象上的额外数据。

    目前我对 部分类 为我的实体设计。但我不介意切换设计,因为我还在构建应用程序。

    有什么好处 FormViewModel 而不是简单的 部分类别 方法是什么 最佳实践 在这件事上?

    所有的帮助都非常感谢!

    2 回复  |  直到 15 年前
        1
  •  1
  •   Jarrett Meyer    15 年前

    和许多事情一样,这要看情况而定。如果你的应用很小,并且你在用户看到的东西之间有一对一的关系,你可能不需要视图模型。您可以直接公开您的模型。大多数应用程序都是小型应用程序。

    随着应用程序(尤其是UI)的增长,您可能会发现需要在数据层模型对象和表示层模型对象之间实现更大的分离。这就是视图模型出现的地方。尽管属性相同(即用户具有firstname、lastname、emailaddress等),但模型的方法和要求也不同。视图模型使您能够更紧密地遵循 Single Responsibility Principle .

    请不要相信不使用视图模型是一个主要的罪过。Rails世界中没有人使用视图模型。(至少我能找到。Rails是一种动态语言,因此它改变了很多规则。)

        2
  •  1
  •   Mattias Jakobsson    15 年前

    通过使用部分类方法,您可以强制域模型了解很多关于您的UI的信息。所以我想说使用这种方法被认为是不好的做法。当应用程序增长时,维护起来可能会很混乱。如果您有一个视图需要表示来自两个完全不同模型的数据,会发生什么?

    使用视图模型是一种非常常见的模式,并且已经证明它非常有效。但是,使用这种模式的方法不同。您还可以使用包含域模型对象的视图模型。或者,您可以创建完全独立的视图模型,这些视图模型只包含它们需要显示的数据,而不包含您的域模型。如果使用这种方法,最终会得到很多映射代码。这里我建议你用 automapper 这对你有很大帮助。