我应该迁移到ASP.NET MVC?

我刚刚听了StackOverflow小组的第17个播客,他们谈到了ASP.NET MVC ,所以我决定检查一下。

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

真的有很大的优点,使它值得吗?

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


我刚刚find了这个

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

这将如何工作? 没有视图状态? 没有事件?

如果你现在对WebForms很满意,那么也许ASP.NET MVC不适合你。

我很长时间都对WebForms感到沮丧。 我绝对不是一个人在这里。 networking上的智能客户端,有状态的抽象在复杂的情况下严重崩溃。 我碰巧喜欢HTML,Javascript和CSS。 WebForms试图从我这里隐藏。 对于那些并不复杂的问题,它也有一些非常复杂的解决scheme。 Webforms本身也很难testing,虽然你可以使用MVP,但它不是一个伟大的Web环境解决scheme…(与MVC相比)。

MVC将吸引你,如果… – 你想要更多的控制你的HTML – 想像一个无缝的Ajax经验像每个其他平台一样 – 想要可testing性通过 – 通过 – 希望有意义的URL – 恨处理回发和视图状态问题

至于预览版5的架构,相当稳定,devise大多在那里,升级并不困难。 我在Preview 1上启动了一个应用程序,并在最新的预览版可用的几个小时内升级。

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

如果一个人留下不好的味道,你可能试图用螺丝刀敲打一个钉子。 某些问题对于使用MVC优雅和简单的WebForms来说非常麻烦,反之亦然。

我已经使用ASP.NET MVC(我甚至写了一个HTTPModule,可以让你在web.config中定义路由),在我的嘴里仍然有一丝苦涩的味道。

这似乎是组织和生产力倒退的一大步。 也许它不适合某些人,但是我已经弄清楚了webforms,并且对它们提出了可以维护的挑战。

那个,我不认同目前的“testing一切”的时尚…

ASP.NET MVC基本上允许你分开代码的不同部分的责任。 这使您能够testing您的应用程序。 你可以testing你的视图,路由等,它也加快了应用程序,因为现在没有ViewState或Postback。

但是,也有缺点。 因为你不使用WebForms,你不能使用任何ASP.NET控件。 这意味着如果你想创build一个GridView,你将运行一个for循环并手动创build表。 如果你想在MVC中使用ASP.NET向导,那么你将不得不自己创build。

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

一般来说,由于丰富的控件和自动pipe道,我更喜欢Webforms框架。

我会先创build一个testing站点,看看团队的想法,但是对于我来说,在使用MVC之后,我不会回到WebForms。

有些人不喜欢与HTML混合的代码,我可以理解,但是我更喜欢页面生命周期,为我呈现HTML和biggy等东西的灵活性 – 页面源代码中没有embedded视图状态。

有些人更喜欢MVC的更好的可测性,但个人大部分代码是在中间层,很容易testing…

@Jonathan Holland我看到你被拒绝了,但这是一个非常有效的观点。 我一直在阅读一些关于intertubes的post,那里的人似乎混淆了ASP.NET MVC 框架和MVC 模式

MVC本身就是一个devise模式 。 如果所有你正在寻找的是一个“关注点分离”,那么你一定可以通过webforms来实现。 就个人而言,我是标准n层环境中MVP模式的忠实粉丝。

如果你真的想要在ASP.NET世界中完全控制你的标记,那么MVC就是为你而做的。

@Juan Manuel你有没有经典的ASP? 当你不得不编程所有你自己的事件和“查看状态”的项目(比如下拉表单提交后回顾其选定的值)?

如果是这样的话,那么ASP.NET MVC就不会觉得尴尬了。 我会检查Rob Conery的Awesome系列“ MVC店面 ”,他一直在这个框架中走过,并为店面网站构build每个预期的组件。 这真的是令人印象深刻,容易遵循(追赶是艰难的,因为罗布已经重新活跃,并在该系列中发布了很多)。

就个人而言,与杰夫·阿特伍德对这个话题的感觉完全相反,我更喜欢webform模型。 这是完全不同于VBScript /经典的ASP日子,但保持viewstate在检查和编写自己的CSS友好的控制是愉快的,实际上。

然后再说一遍,我说“喜欢”。 ASP.NET MVC真的很棒,更类似于其他的Web技术。 如果您喜欢或需要在多个平台上工作,那么从ASP.NET MVC转移到RAILS当然更容易。 而且,当然,如果你的公司不允许任何颜色的“testing”软件,显然是非常稳定的(这个网站) 在这个时候把它投入生产可能是一个问题。

如果您是一名专业的ASP.NET开发人员,并且有时间学习新的东西,我肯定会build议您花一些时间来尝试一下ASP.NET MVC。 这可能不是解决所有问题的方法,而且有许多项目可能会从传统的webform实现中受益匪浅,但是在尝试弄清楚MVC的过程中,您肯定会学到很多东西,并且可能会带来很多想法你可以申请你的工作。

在尝试开发MVC宠物项目时,我经历了许多博客文章和video教程时注意到的一件好事是,它们大多数遵循当前的最佳实践(TDD,IoC,dependency injection以及较低程度的POCO),加上大量的JQuery来让用户的体验更加有趣,那就是我可以应用在当前的webform应用上的东西,而且我之前并没有深入过。

ASP.NET MVC的做事方式和webforms是如此的不同以至于它会震动你的头脑,对开发者来说是非常好的!

OTOH对于网页开发人员来说是一个全新的开始我认为MVC绝对是一个更好的开始,因为它提供了一个很好的开箱即用的devise模式,并且更接近于网页的工作方式(毕竟HTML是无状态的)。 在MVC上,你决定每一个在networking上来回传输的字节(至less在你不用疯了的时候)。 一旦这个人得到了,他或她将会更好地装备到ASP.NET webforms和服务器控件所提供的“人工”设施。

如果你喜欢使用为你做很多工作的服务器控件,你将不会喜欢MVC,因为你需要在MVC中做很多手工编码。 如果你喜欢GridView,希望自己写一个或者使用别人的。

MVC不适合每个人,特别是如果你不进入unit testing的GUI部分。 如果您对网页表单感到满意,请留下来。 Web Forms 4.0将解决一些当前的缺陷,比如由ASP.NET自动分配的ID。 你将在下一个版本中控制这些。

除非你正在使用的开发人员熟悉MVC模式,否则我不会。 至less我会在做出如此大的改变之前先与他们交谈。

我试图做出有关ASP.NET MVC的相同决定, 胡安曼努埃尔 。 我现在正在等待正确的小项目,我可以尝试一下。 如果实验进展顺利 – 我的直觉就是 – 那么我将围绕这个框架来构build我的新大型项目。

使用ASP.NET MVC,您将失去ASP.NET Web窗体的视图状态/回传模型。 如果没有这个抽象的话,你可以使用HTML和HTTP POST和GET命令更加紧密地工作。 我相信UI编程有点朝着传统的ASP方向发展。

由于这种不便,有了更大程度的控制。 我经常发现自己正在和ASP.NET的会话垃圾斗争,并且重新获得对输出HTML的完全控制的前景似乎非常令人耳目一新。

这可能是两个世界中最好的或者最糟糕的。

5个理由你应该仔细看看ASP.NET MVC

我不知道ASP.NET MVC,但我对MVC模式非常熟悉。 我没有看到另一种方式来build立没有MVC的专业应用程序。 它必须是MVC模型2,像Spring或Struts。 顺便说一下,你们如何在没有MVC的情况下构buildWeb应用程序? 当您遇到需要对每个请求进行某种validation的情况时,如validation用户是否已通过身份validation,您的解决scheme是什么? 某种包含(validate.aspx)的每个页面?

你从未听说过N-Tier的发展吗?

RAD(webforms with ajax经常是反RAD),完整的控制(不需要开发大量的代码和循环)。 webforms是好的,只是绑定一些网格等,而不是其他任何东西,还有一个更重要的东西 – 性能。 当你陷入networkingforms,你会迟早开启MVC。

我不会build议只在现有的项目上进行切换。 也许开始一个小型的“演示”项目,团队可以使用这个项目来试验这个技术,并且(如果有必要的话)学习他们需要的东西,并向pipe理层certificate切换是值得的。 最后,开发团队也许会意识到他们还没有准备好,或者是不值得的。

不pipe你做什么,一定要logging下来。 也许如果你使用演示项目,写一个postmortem为将来的参考。

我不知道ASP.NET MVC,但我对MVC模式非常熟悉。 我没有看到另一种方式来build立没有MVC的专业应用程序。 它必须是MVC模型2,像Spring或Struts。 顺便说一下,你们如何在没有MVC的情况下构buildWeb应用程序? 当您遇到需要对每个请求进行某种validation的情况时,如validation用户是否已通过身份validation,您的解决scheme是什么? 某种包含(validate.aspx)的每个页面?

不,你不应该。 随意尝试一个新的项目,但很多熟悉ASP.NET webforms的人都不喜欢它,因为不得不使用原始的HTML +很多不同的概念+在文档/教程。

事实上,ASP.net MVC只是在“预览5”是一个令人担忧的时候,看着它?

我知道StackOverflow是使用它创build的,但是在微软正式退出beta / alpha / preview版本之前,微软是否有机会对框架进行重大改变?

如果你已经死了使用MVC框架,那么我宁愿开始使用Castle项目的一个…

当我这么说的时候,我个人认为WebControls有很多优点,例如能够创build具有状态客户端的事件驱动的应用程序等等。 对WebControls的大多数论据是由于缺乏对WebControl模型的理解等而造成的,而不是因为它们实际上是非常糟糕的。

MVC不是一个银弹,特别是不是微软MVC …

我已经看到MVC框架的一些实现,为了可testing性,有人在代码中呈现整个HTML。 在这种情况下,视图也是一个可testing的代码。 但是我说,我的朋友把HTML放在代码中是一个维护的噩梦,他说我喜欢编译和testing的所有东西。 我没有争辩,但后来发现,他把这个HTML到资源文件和疯狂继续…

他没有意识到,分离视图的整个想法也解决了维护部分。 它在某些应用程序中超过了可testing性。 如果我们使用WYSWYG工具,我们不需要testingHTMLdevise。 WebForms适合这个原因。

我经常看到有人滥用回传和查看状态,并将其归咎于ASP .NET模型。

记住最好的网页仍然是.HTML,这就是ASP .NET MVC的力量。