【问题标题】:Key risks when using ASP.NET MVC for the first time首次使用 ASP.NET MVC 时的主要风险
【发布时间】:2014-07-07 18:51:26
【问题描述】:

我们计划在一个相对重要的(对业务而言)项目中使用 ASP.NET MVC。开发团队由 4 名开发人员和 1 名技术主管组成。其中 2 位开发人员和技术主管曾在 ASP.NET WebForms 项目上合作过,并且对使用该技术充满信心。

当我们回顾在我们的第一个 WebForms 项目中使用的一些方法时,我们有点畏缩(示例包括过度使用 UpdatePanel、缺乏对 ListView 等控件的了解、臃肿的 ViewState 等)。

重要的是,我们不要在一年后回顾这个项目并对我们的一些 ASP.NET MVC 方法感到畏缩!

根据经验,是否有人在第一次使用 ASP.NET MVC 时会遇到任何关键风险?

我正在考虑陷阱、需要一段时间才能运行的灯泡、在你学会特定项目之前你觉得你正在努力的部分框架,诸如此类的事情。

【问题讨论】:

  • 一年后回顾您的代码并为您所写的内容感到畏缩不是很正常吗?特别是新框架?除非你的前辈熟悉 MVC 模式,否则没有人会牵着你的手帮助你第一次写出很棒的代码。
  • @Chad - 你可能是对的,我只是想尽量减少我们可能面临的畏缩因素!

标签: asp.net-mvc


【解决方案1】:

使用强类型视图并为每个视图创建一个新模型

原因很简单:这是为了确保您的模型与视图分离。如果你需要进行重构,你只需要破坏一个部分。所以如果你有一个名为“Latest News”的视图,你应该有一个“LatestNewsViewModel”。然后控制器的工作就是从实际的模型/数据库中获取数据并创建一个视图模型,并将其传递到您的视图中。此外,如果您决定需要在视图中添加其他内容,则不必重构整个数据访问层,因为您只需更改 ViewModel 和填充它的控制器操作。

性能

我建议您查看this slideshow,了解可能产生巨大影响的性能问题和优化。

【讨论】:

  • 我的印象是,您的模型不应该“关心”使用它们的视图(关注点分离)。您是否推荐两类模型:代表“公正”数据的模型,以及专门用于视图的模型?
  • 是的。基本上你有你常用的模型类来处理读取和写入数据库的数据,但你也有为每个视图单独的模型类 - 所谓的视图模型。这些视图模型实际上并没有做任何事情,它们只是一组属性,并且准确地保存了视图所需的数据。然后,控制器与您的“普通”模型对话以获取所需的数据,创建适当 ViewModel 的实例并填充它,然后将其发送到(强类型)视图。一开始似乎有点矫枉过正,但以后会省去重构的麻烦。
  • 另见此链接:mikesdotnetting.com/Article.aspx?ArticleID=105 其中 HomePageViewModel 是示例中的 ViewModel。
【解决方案2】:

我见过的最大风险来自回归无国籍媒体。

回发已消失。大多数服务器控件都消失了。视图状态消失了。事件驱动模型不复存在。

如果您的开发人员只使用 asp.net 网络表单来构建网站,而从未使用其他网络技术,那么他们需要大量学习。

【讨论】:

  • 我同意这可能需要大量学习,但这是很好的学习 ;-) 不幸的是,许多 Web 表单开发人员对 Web 知之甚少,在许多情况下,比典型的经典 ASP 开发人员了解得少,他至少不得不考虑 HTTP POST 和 GET,即使大部分代码最终都变成了意大利面条。我相信 Web 表单人员学习 MVC 是有益的,因为这意味着他们将了解 Web 应用程序中真正发生的事情。我不同意这是对无状态媒体的回归。网络一直是一种无状态的媒介,只是网络表单以一种相当笨拙的方式隐藏了事实。
  • 哦,完全。这是非常好的学习,对任何开发人员都非常有益,只要它真正向他们展示了如何使用 HTTP 的基本要素。当我说返回时,对于太多网络表单的人来说,它有状态的。 Viewstate 对知情人士来说既笨拙又丑陋,但对于太多的 asp.net 开发人员来说,它就是网络“工作”的方式。
【解决方案3】:

您可以从 Scotts Guthrie 的博客下载免费的eBook,它为您提供了有关如何从头开始构建 ASP.NET MVC 站点的完整深入指南。

【讨论】:

    【解决方案4】:

    对我来说最重要的是了解模型绑定以及您可以拥有类型化的视图。

    还可以正确保护您的路线。

    【讨论】:

    • 你能补充更多细节吗?模型绑定 - 你在谈论强类型视图?保护路线是什么意思?
    猜你喜欢
    • 2013-03-30
    • 2012-09-24
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 2023-03-31
    相关资源
    最近更新 更多