【问题标题】:Use view models or DB models in ASP.NET MVC 5在 ASP.NET MVC 5 中使用视图模型或数据库模型
【发布时间】:2014-10-14 07:59:34
【问题描述】:

在 MVC 5 教程之一中,他们直接在模型上声明了验证属性。此外,他们将模型直接传递给视图。以前,我们使用视图模型来处理这种行为。请提供你的想法 遵循哪种方法。

http://www.asp.net/mvc/tutorials/mvc-5/introduction/adding-validation

【问题讨论】:

  • 您使用的是代码优先/数据库优先/等吗?例如,如果您在模型文件夹中使用数据库(.edmx 文件),您可以添加自动生成大量验证的脚手架

标签: asp.net-mvc viewmodel data-annotations


【解决方案1】:

我个人更喜欢视图模型方法,因为:

  1. 它允许我只选择我实际需要的字段(我不想加载整个实体,而是只加载我使用 Select(x => new ViewModel() { PropName = x.PropName })。这给了我更好的性能
  2. 我的视图模型依赖于用户界面(业务逻辑)而不是数据库表结构,这给了我更灵活的解决方案,我可以轻松地切换到不同的数据存储。
  3. 我可以使用新的属性/方法轻松扩展我的视图模型
  4. 它帮助我避免N+1 Select problem

什么时候不使用视图模型?

基本上只有在您想快速尝试某些东西的情况下,说您正在构建一个不会在生产环境中使用的原型。

【讨论】:

  • 更不用说强类型,例如持久性模型的表单可能是一个巨大的安全问题。
【解决方案2】:

更好的选择是使用 ViewModel。这样做会更好,因为您可以更好地控制在哪里显示的内容。

当您开始构建不仅仅是数据输入的应用程序时,您将面临不得不做类似以下愚蠢事情的风险:

有一个包含 30 个字段的用户表,包括密码、输入日期、上次更新日期、送货地址、电子邮件、政策编号等。

客户要求您建立一个忘记密码页面。如果您使用教程所示的 DB 对象,您将不得不将其他 29 个字段放在隐藏字段中并传递它们。

这是您将遇到的最基本的问题。现实世界的问题比这严重得多。尤其是当您开始构建复杂的主从表单时。

【讨论】:

    猜你喜欢
    • 2014-01-07
    • 2017-10-31
    • 2012-06-11
    • 2010-11-11
    • 2017-06-17
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多