我刚刚听了 StackOverflow 团队的第 17 期播客,他们对 ASP.NET MVC 我决定去看看。

但首先,我想确定这是值得的。我已经为几天后开始的项目创建了一个基础 Web 应用程序(供其他开发人员构建),并想根据您的经验了解我是否应该花时间学习 MVC 基础知识并重新创建使用此模型的基本 Web 应用程序。

真的有值得这样做的大优点吗?

编辑:这不是一个现有的项目,而是一个即将开始的项目,所以如果我要做的话应该是现在......


我刚刚发现这个

但是,它不使用现有的回发模型来与服务器进行交互。相反,您将把所有最终用户交互路由到 Controller 类 - 这有助于确保关注点和可测试性的清晰分离(这也意味着基于 MVC 的视图没有视图状态或页面生命周期).

那会如何运作呢?没有视图状态?没有活动吗?

有帮助吗?

解决方案

如果您现在对 WebForms 非常满意,那么 ASP.NET MVC 可能不适合您。

很长一段时间以来,我一直对 WebForms 感到沮丧。我绝对不是一个人在这里。在复杂的场景中,网络上的智能客户端、状态抽象会严重崩溃。我碰巧喜欢 HTML、Javascript 和 CSS。WebForms 试图向我隐藏这一点。它还有一些非常复杂的解决方案,可以解决实际上并不那么复杂的问题。Webforms 本质上也很难测试,虽然您可以使用 MVP,但它对于 Web 环境来说并不是一个很好的解决方案......(与 MVC 相比)。

MVC 将吸引您,如果...- 您需要对HTML的更多控制 - 想要像其他每个平台一样的无缝AJAX体验 - 想要通过并直通 - 想要有意义的URL-讨厌处理后返还和ViewState问题

而且框架是Preview 5,已经相当稳定了,设计也基本有了,升级也不难。我在预览版 1 上启动了一个应用程序,并在最新预览版发布后的几个小时内进行了升级。

其他提示

重要的是要记住,MVC 和 WebForms 并不竞争,并且其中一个并不比另一个更好。它们只是不同的工具。大多数人似乎将 MVC 与 WebForms 视为“一个必须是比另一个更好的锤子”。那是错的。一个是锤子,另一个是螺丝刀。两者都在组合过程中使用,但各有不同的优点和缺点。

如果其中一个给你留下了不好的印象,那么你可能正在尝试用螺丝刀敲钉子。某些问题对于 WebForm 来说很麻烦,而对于 MVC 来说却变得优雅而简单,反之亦然。

我已经使用过 ASP.NET MVC(我什至编写了一个 HTTPModule,让您可以在 web.config 中定义路由),但我仍然对它感到苦涩。

这似乎是组织和生产力方面的巨大倒退。也许它不适合某些人,但我已经弄清楚了网络表单,并且就使它们可维护而言,它们对我来说没有任何挑战。

那,我不赞同当前的“测试一切”时尚......

ASP.NET MVC 基本上允许您分离代码不同部分的职责。这使您能够测试您的应用程序。您可以测试您的视图、路线等。由于现在没有 ViewState 或 Postback,它也确实加快了应用程序的速度。

但是,也有缺点。由于您没有使用 WebForms,因此您无法使用任何 ASP.NET 控件。这意味着如果您想创建 GridView,您将运行 for 循环并手动创建表。如果您想在 MVC 中使用 ASP.NET 向导,那么您必须自己创建。

如果您厌倦了 ASP.NET Webform 并且想要自己执行所有操作,那么这是一个很好的框架。但您需要记住,您是否会从再次创建所有内容中受益?

一般来说,我更喜欢 Webforms 框架,因为它有丰富的控件套件和自动管道。

我会先创建一个测试站点,看看团队的想法,但对我来说,在使用 MVC 后我不会再回到 WebForms。

有些人不喜欢与 HTML 混合的代码,我可以理解这一点,但我更喜欢灵活性,而不是页面生命周期、渲染 HTML 和对我来说很重要的东西 - 页面源代码中没有嵌入视图状态。

有些人更喜欢 MVC 以获得更好的可测试性,但就我个人而言,我的大部分代码都位于中间层,无论如何都很容易测试......

@Jonathan Holland 我看到你被否决了,但这是一个非常有效的观点。我一直在阅读一些有关 intertubes 的帖子,人们似乎对 ASP.NET MVC 感到困惑 框架 和MVC 模式.

MVC 本身就是一个 设计模式. 。如果您所寻找的只是“关注点分离”,那么您当然可以通过网络表单来实现这一目标。就我个人而言,我是 MVP模式 在标准 n 层环境中。

如果您确实希望完全控制 ASP.NET 世界中的标记,那么 MVC 框架非常适合您。

@Juan Manuel 你曾经从事过经典 ASP 工作吗?当您必须对自己的所有事件和“viewstatish”项目(例如在表单提交后调用其所选值的下拉列表)进行编程时?

如果是这样,那么 ASP.NET MVC 就不会立刻感到那么别扭了。我会看看 Rob Conery 的精彩系列”MVC 店面”他一直在浏览框架并为店面网站构建每个预期的组件。它确实令人印象深刻且易于理解(追赶是很困难的,因为 Rob 非常活跃并且在该系列中发布了很多内容)。

就我个人而言,这与杰夫·阿特伍德的观点完全相反 对这个话题的感受, ,我比较喜欢webform模型。这确实与 vbscript/经典 ASP 时代完全不同,但实际上,检查视图状态并编写自己的 CSS 友好控件是令人愉快的。

再说一次,请注意我说的是“喜欢”。ASP.NET MVC 确实很棒,而且与其他 Web 技术更相似。如果您喜欢或需要在多个平台上工作,那么从 ASP.NET MVC 转向 RAILS 当然会更容易。虽然,是的,它显然非常稳定(这个网站),如果您的公司不允许任何颜色的“测试版”软件;此时将其实施到生产中可能是一个问题。

如果您是一名专业的 ASP.NET 开发人员,并且有时间学习新东西,我当然建议您花一些时间尝试 ASP.NET MVC。它可能无法解决您所有的问题,并且有很多项目可能会从传统的 Webform 实现中受益更多,但是在尝试弄清楚 MVC 时,您肯定会学到很多东西,并且可能会带来很多想法你可以申请你的工作。

在尝试开发 MVC 宠物项目时,我在浏览许多博客文章和视频教程时注意到的一件好事是,它们中的大多数都遵循当前的最佳实践(TDD、IoC、依赖注入,以及较低程度的 POCO),加上大量的 JQuery 来让用户的体验更有趣,这是我可以应用在我当前的 Web 表单应用程序上的东西,而且我以前没有接触过如此深入的东西。

ASP.NET MVC 的处理方式与 Webform 非常不同,它会动摇您的想法,这对于开发人员来说非常好!

OTOH 对于 Web 开发的完全初学者来说,我认为 MVC 绝对是一个更好的开始,因为它提供了开箱即用的良好设计模式,并且更接近 Web 真正的工作方式(毕竟 HTML 是无状态的)。在 MVC 上,您可以决定线路上来回传输的每个字节(至少在您不会疯狂使用 html 助手时)。一旦该人掌握了这一点,他或她将能够更好地迁移到 ASP.NET Web 表单和服务器控件提供的“人工”设施。

如果您喜欢使用为您做很多工作的服务器控件,您将不会喜欢 MVC,因为您需要在 MVC 中进行大量手动编码。如果您喜欢 GridView,那么可以自己编写一个或使用别人的。

MVC 并不适合所有人,特别是如果您不喜欢对 GUI 部分进行单元测试的话。如果您对网络表单感到满意,请继续使用它。Web Forms 4.0 将修复当前的一些缺点,例如由 ASP.NET 自动分配的 ID。您将在下一版本中控制这些。

除非与您一起工作的开发人员熟悉 MVC 模式,否则我不会这样做。至少在做出这么大的改变之前我会先和他们谈谈。

我正在尝试对 ASP.NET MVC 做出同样的决定, 胡安·曼努埃尔. 。我现在正在等待合适的小型项目出现,我可以进行实验。如果实验进展顺利——我的直觉告诉我它会成功——那么我将围绕该框架构建我的新大型项目。

使用 ASP.NET MVC,您将失去 ASP.NET Web 窗体的视图状态/回发模型。如果没有这种抽象,您可以更密切地使用 HTML 以及 HTTP POST 和 GET 命令。我相信 UI 编程有点向经典 ASP 的方向发展。

伴随着这种不便,随之而来的是更大程度的控制。我经常发现自己在与 ASP.NET 的伪会话垃圾作斗争,重新获得对输出 HTML 的完全控制的前景似乎令人耳目一新。

这也许是两个世界中最好的,也可能是最坏的。

我不了解 ASP.NET MVC,但我非常熟悉 MVC 模式。我认为没有其他方法可以在不使用 MVC 的情况下构建专业应用程序。而且它必须是 MVC 模型 2,例如 Spring 或 Struts。顺便问一下,你们是如何在没有 MVC 的情况下构建 Web 应用程序的?当您遇到每个请求都需要某种验证(例如验证用户是否经过身份验证)的情况时,您的解决方案是什么?每个页面中都包含某种包含(validate.aspx)?

您从未听说过 N-Tier 开发吗?

Ajax、RAD(使用 ajax 的 Web 表单通常是反 RAD 的)、完全控制(无需开发整堆代码和周期)。网络表单仅适用于绑定一些网格等,而不适用于其他任何事情,还有一件非常重要的事情 - 性能。当你陷入 Web 表单困境时,你迟早会切换到 MVC。

我不建议只对现有项目进行切换。也许可以启动一个小型“演示”项目,团队可以用它来试验该技术,并(如有必要)了解他们需要什么,并向管理层证明值得进行转换。最后,即使是开发团队也可能意识到他们还没有准备好或者不值得。

无论你做什么,一定要记录下来。如果您使用演示项目,也许可以写一份事后分析以供将来参考。

我不了解 ASP.NET MVC,但我非常熟悉 MVC 模式。我认为没有其他方法可以在不使用 MVC 的情况下构建专业应用程序。而且它必须是 MVC 模型 2,例如 Spring 或 Struts。顺便问一下,你们是如何在没有 MVC 的情况下构建 Web 应用程序的?当您遇到每个请求都需要某种验证(例如验证用户是否经过身份验证)的情况时,您的解决方案是什么?每个页面中都包含某种包含(validate.aspx)?

不,你不应该。请随意在新项目中尝试一下,但许多熟悉 ASP.NET Webform 的人还不喜欢它,因为必须处理原始 HTML + 许多不同的概念 + 文档/的选择相当少教程。

ASP.net MVC 仅在“预览版 5”中这一事实在研究时是否值得关注?

我知道 StackOverflow 是使用它创建的,但是 Microsoft 有可能在正式退出 beta/alpha/预览版之前对该框架实施重大更改吗?

如果您执意要使用 MVC 框架,那么我宁愿开始使用 Castle 项目的框架......

话虽如此,我个人认为 WebControls 有很多优点,例如能够创建具有有状态客户端的事件驱动应用程序等。大多数反对 WebControl 的论点都是由于缺乏对 WebControl 模型的理解等而构建的。并不是因为它们实际上真的很糟糕......

MVC 不是灵丹妙药,尤其是 Microsoft MVC……

我见过一些 MVC 框架的实现,为了可测试性,有人在代码中呈现了整个 HTML。在这种情况下,视图也是可测试的代码。但我说,我的朋友,将 HTML 放入代码中是维护的噩梦,他说我喜欢编译和测试的所有内容。我没有争辩,但后来发现他确实把这个 HTML 放入了资源文件中,疯狂还在继续……

他几乎没有意识到分离视图的整个想法也解决了维护部分。在某些应用中它比可测试性更重要。如果我们使用 WYSWYG 工具,我们不需要测试 HTML 设计。由于这个原因,WebForms 是很好的。

我经常看到人们滥用回发和视图状态并将其归咎于 ASP .NET 模型。

请记住,最好的网页仍然是 .HTML,这就是 ASP .NET MVC 的强大之处。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top