我应该迁移到ASP.NET MVC吗?

时间:2008-08-27 13:20:15

标签: asp.net-mvc

我刚刚收听了StackOverflow团队的第17个播客,他们高度评价ASP.NET MVC,我决定将其核实。

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

真的有很多专业人士会让它变得有价值吗?

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


我刚发现了这个

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

那怎么办?没有观点?没有事件?

20 个答案:

答案 0 :(得分:65)

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

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

如果...... MVC会吸引你的话 - 您希望更好地控制HTML - 想要像其他平台一样拥有无缝的ajax体验 - 想要通过可测试性 - 想要有意义的网址 - HATE处理回发& viewstate问题

至于预览5的框架,它非常稳定,设计主要在那里,升级并不困难。我在预览1上启动了一个应用程序,并在最新预览可用的几个小时内升级。

答案 1 :(得分:31)

重要的是要记住MVC和WebForms不竞争,一个并不比另一个好。它们只是不同的工具。大多数人似乎将MVC与WebForms联系起来,因为“一个人必须是一个比另一个更好的锤子”。那是错的。一个是锤子,另一个是螺丝刀。两者都用于将事物放在一起,但有不同的优点和缺点。

如果有人给你带来不好的味道,你可能会尝试用螺丝刀敲钉子。 WebForms使用MVC变得优雅和简单,某些问题很麻烦,反之亦然。

答案 2 :(得分:12)

我使用过ASP.NET MVC(我甚至编写了一个允许你在web.config中定义路由的HTTPModule),我仍然对此感到苦涩。

这似乎是组织和生产力方面倒退的一大步。也许它不适合某些人,但我已经找到了网络形式,并且他们对我没有任何挑战,只要使它们可维护。

那,我并不支持目前的“TEST EVERYTHING”时尚......

答案 3 :(得分:11)

ASP.NET MVC基本上允许您分离代码的不同部分的职责。这使您可以测试您的应用程序。您可以测试您的视图,路由等。它还可以加速应用程序,因为现在没有ViewState或Postback。

但是也有缺点。因为,您不使用WebForms,您不能使用任何ASP.NET控件。这意味着如果要创建GridView,您将运行for循环并手动创建表。如果要在MVC中使用ASP.NET向导,则必须自己创建。

如果您厌倦了ASP.NET webform并希望自己执行所有操作,那么这是一个很好的框架。但是你需要记住,你是否会因为再次创造所有东西而受益?

总的来说,由于丰富的控件套件和自动管道,我更喜欢Webforms框架。

答案 4 :(得分:9)

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

有些人不喜欢与HTML混合的代码,我可以理解这一点,但我更喜欢灵活覆盖页面生命周期,为我呈现HTML和biggy等内容 - 没有嵌入在页面源中的viewstate cruft。

有些人更喜欢MVC以获得更好的可测性,但我个人的大多数代码都在中间层并且无论如何都很容易进行测试......

答案 5 :(得分:6)

@Juan Manuel你曾经在经典ASP工作吗?当您必须编写所有自己的事件和“viewstatish”项目时(例如在提交表单后回忆其选定值的下拉列表)?

如果是这样,那么ASP.NET MVC就不会觉得尴尬了。我会查看Rob Conery的Awesome系列节目“MVC Storefront”,他一直在浏览框架并为店面网站构建每个预期的组件。这真是令人印象深刻且易于理解(追赶非常艰难,因为Rob一直活跃并在该系列中发布了很多内容)。

就个人而言,与Jeff Atwood的feelings on the topic完全相反,我更喜欢webform模型。它确实与vbscript /经典的ASP日完全不同,但保持视图状态的检查和编写自己的CSS友好控件实际上很有趣。

然后再说一遍,我说“喜欢”。 ASP.NET MVC非常棒,而且更像其他网络技术。如果您喜欢或需要在多个平台上工作,从ASP.NET MVC转换到RAILS肯定更容易。而且,是的,如果贵公司不允许使用任何颜色的“beta”软件,它显然非常稳定(这个网站);此时将其投入生产可能是一个问题。

答案 6 :(得分:6)

@Jonathan Holland我看到你被选中了,但这是一个非常有意义的观点。我一直在阅读关于intertubes的一些帖子,人们似乎在混淆ASP.NET MVC the framework 和MVC the pattern

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

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

答案 7 :(得分:5)

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

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

答案 8 :(得分:5)

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

在尝试开发MVC宠物项目时,我在阅读许多博客文章和视频教程时注意到的一件好事是大多数都遵循当前的最佳实践(TDD,IoC,依赖注入,并且在较低程度上POCO),加上大量的JQuery让用户体验更加有趣,这就是我可以在我当前的webform应用程序中应用的东西,而且我之前没有曝光过这样的深度。

ASP.NET MVC的做事方式与webforms有很大的不同,它会让你有点动摇,对于开发人员来说非常好!

OTOH是一个初学者到网络开发我觉得MVC绝对是一个更好的开始,因为它提供了一个开箱即用的好设计模式,并且更接近网络真正的工作方式(毕竟HTML是无状态的)。在MVC上,你决定在线上来回传递的每个字节(至少在你没有对html助手疯狂时)。一旦这个人得到了,他或她就能更好地适应ASP.NET网页和服务器控件提供的“人工”设施。

答案 9 :(得分:4)

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

答案 10 :(得分:4)

答案 11 :(得分:4)

我正在尝试对ASP.NET MVC做出同样的决定,Juan Manuel。我现在正在等待合适的一口大小的项目,我可以尝试一下。如果实验进展顺利 - 我的直觉说它会 - 那么我将围绕框架构建我的新大型项目。

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

由于这种不便,需要更大程度的控制。我经常发现自己正在与ASP.NET的psuedo-session垃圾斗争,重新获得输出HTML的完全控制的前景似乎非常令人耳目一新。

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

答案 12 :(得分:2)

Ajax,RAD(带有ajax的webforms经常是反RAD),完全控制(不需要开发一大堆代码和循环)。 webforms只能绑定一些网格,而不是其他任何东西,还有一个非常重要的东西 - 性能。当你陷入网络形式时,你迟早会打开MVC。

答案 13 :(得分:2)

  

我不知道ASP.NET MVC,但我对MVC模式非常熟悉。我没有看到另一种在没有MVC的情况下构建专业应用程序它必须是MVC模型2,如Spring或Struts。顺便说一句,你们如何在没有MVC的情况下构建Web应用程序?当您遇到需要对每个请求进行某种验证的情况时,如果验证用户是否经过身份验证,您的解决方案是什么?每个页面都有一些include(validate.aspx)?

你有没有听说过N-Tier开发?

答案 14 :(得分:1)

不,你不应该。随意尝试一个新的项目,但很多熟悉ASP.NET webforms的人还不喜欢它,因为不得不捣乱原始的HTML +许多不同的概念+相当纤薄的文档选择/教程。

答案 15 :(得分:1)

我不知道ASP.NET MVC,但我对MVC模式非常熟悉。我没有看到另一种在没有MVC的情况下构建专业应用程序它必须是MVC模型2,如Spring或Struts。顺便说一句,你们如何在没有MVC的情况下构建Web应用程序?当您遇到需要对每个请求进行某种验证的情况时,如果验证用户是否经过身份验证,您的解决方案是什么?每个页面都有一些include(validate.aspx)?

答案 16 :(得分:1)

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

无论你做什么,一定要记录下来。也许如果您使用演示项目,请编写一个事后调查以供将来参考。

答案 17 :(得分:0)

ASP.net MVC仅在“预览5”中是否会引起关注?

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

答案 18 :(得分:0)

如果你已经开始使用MVC框架了,那么我宁愿开始使用Castle项目......

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

MVC不是Silver Bullet,尤其不是Microsoft MVC ......

答案 19 :(得分:0)

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

他没有意识到分离View的整个想法也解决了维护部分。它超过了某些应用程序的可测试性。如果我们使用WYSWYG工具,我们不需要测试HTML设计。 WebForms就是出于这个原因。

我经常看到人们滥用postback和viewstate并将其归咎于ASP .NET模型。

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