为什么要在Web窗体上使用MVC?


11

最近,一位建筑师将我们公司描述为提供劳斯莱斯解决方案(MVC),而他所需要的只是一辆Toyota(Web Forms)。

我很想知道您对Web表单与MVC作为架构选择的看法。


11
我认为架构师对ASP.NET MVC不太了解。
亚当·克罗斯兰

3
@Chris Webforms不是MVC的子集。两者完全独立地工作。另外,webforms很旧,可能维护时间不会更长。而且,对于前端Web / UI开发人员来说,这是反基督的。
Erik Reppen

Answers:


20

劳斯莱斯(Rolls-Royce)/丰田(Toyota)的类比存在严重缺陷和误导。一个(ASP.NET MVC)不仅仅是另一个(ASP.NET WebForms)的更高级或更昂贵的版本。它们是使用ASP.NET构建Web应用程序的完全不同的方法。

对我而言,MVC和WebForms之间最大的体系结构差异是它们如何与Web的无状态环境一起工作:WebForms努力构建一组抽象来隐藏Web编程的无状态本质,而MVC包含无状态环境并与之一起工作。它。

每种方法都有其优点和缺点,但是我真的很喜欢用MVC构建网站的感觉比WebForms(具有泄漏抽象层的 WebForms)自然得多。


1
那些笨拙的抽象非常有问题。学习Asp .Net MVC使您对http协议睁开眼睛
Michal Franc

10

这是一个老问题,但它值得更详细的答案,以防万一其他人实际上仍然对此感到两难。

最终,webforms是一个瘦客户端解决方案,这意味着您按下许多漂亮的按钮,即可为您构建前端(客户端)内容。如果您有知道如何在Web表单中启动它的人,并且绝对不存在可维护性/可修改性的问题,并且该站点是完全短期的且可处理的,则此方法完全没有问题。可以学习如何做自己的工作,但是在这种情况下,这需要了解网络表单,webforms试图保护.NET应用程序开发人员免受其侵害以及所有使大多数客户端网络开发人员想要谋杀Microsoft的webforms事物。工程师负责。

在所有其他用例场景的99.5%中,我们已经停止尝试向应用程序开发人员隐藏网络,因为实际上,如果您要编写Web应用程序,那么实际学习网络的工作原理要好得多。胖客户端与瘦客户端解决方案之间的讽刺之处在于,瘦客户端方法不可避免地会使前端的废话肿,而且性能不佳。更重要的是,这些解决方案一直使事情变得僵化,因为对于真正知道自己在做什么并且不希望受到实际框架约束的人们来说,这一切都是地狱。

没有什么比让一个完全了解CSS,JavaScript,HTML,XHR的人变得毫无意义的了,通过使用一个框架来阻塞它们的每一步,使它们完全无用。

  • 清除head标记中的所有“不需要”脚本标记,以防止您搞砸脚本依赖性。(最好让一个“脚本管理器”为您解决),现在,如果没人知道他们在做什么,那么现在没人把它们放在那儿了,但这只是搞砸了。

  • 坚持将所有HTML包装在一个巨大的表单标签中。HTML不允许表单包含在表单中,因此您可以使用webforms或根本不使用webforms。

  • 创建类似于18个步骤的“生命周期”,通过与浏览器进行交互以将消息发送到服务器,然后在服务器响应时做出反应,从而真正归结为对UI事件做出反应。不再需要使用一大堆垃圾来抽象化该过程(公平地说,MS并不是唯一尝试这样做的蠢蛋)。

  • 实际上,它采取了一切可能的方式来解决使用非Webforms解决方案的问题。示例:当我是一名初级客户开发人员时,我花了一整天的时间寻找一种方法,使页面顶部的“提交”按钮触发页面底部的“提交”按钮(由于这一原因,巨物)。通常,这需要5分钟,但是经过了几个小时的反向工程后,负责JavaScript的Webforms才被发现,其中包括设置一个我什至不知道的属性,它告诉您最后一个表单元素是什么。重点是当单击“提交”按钮时,只有在正式的Microsoft Submit(tm)处理程序激活方面,才可以使用正式的Microsoft Submit(tm)按钮。

因此,罗尔斯·罗伊斯(Rolls-Royce)对丰田(Toyota)完全不合理。我想说的更多,这是一个非常合理的现代汽车,相比于微软设计的Pinto车载系统,当发现您从Microsoft以外的其他地方购买了天然气或石油时,它会自动进行90度急转弯,您为此付出了过多的代价。方便的墙壁来猛撞。对于那些对网络一无所知,并希望向微软发以终身忠诚的具有自杀意味的品牌忠实驾驶员的理想汽车。

所有.NET MVC的确是简单,合理的,并且它不会重塑自己的层以覆盖Web顶部。它只是与那里的东西一起工作,可以帮助您淘汰一些样板。有更好/更便宜/更自由的框架,但是如果您已经将自己锁定在.NET中,则可能会做得更糟。

但请注意,不要将@@ $$远离网络表单。现在快要死了。放手吧。告诉您的客户,如果他们还向您承诺一份独家且有利可图的按小时计酬合同,告知他们您何时真正想做新的或不同的事情,或者当废话开始破裂,因为甚至连MS都无法做到时,请告诉您,您将花掉三倍的钱。麻烦继续添加到10,000行ajax.js文件的庞然大物,他们将DLL驴子拉出了您无法触摸的地方。


嗨,埃里克(Erik)喜欢您的回复,所以您得到了我的支持。只是学习HTML 5和CSS,所以您的文章很有启发性。
乍得

+1非常好的答案!多年来,我一直在避免使用MVC,因为我认为这将是一种更为复杂的Web表单方法。听起来现实中会让我尝试使用Web表单更容易(例如,我总是尽量避免使用脚本管理器之类的所有Microsoft BS)。
德鲁·查平

6

ASP.NET MVC解决方案不必比WebForms解决方案复杂。就我个人而言,我发现ASP.NET MVC实际上比WebForms简单得多,并且它显然天生就更干净。

根据我的经验,许多MVC框架(ASP.NET,Rails,CodeIgniter等)具有许多相同的核心功能和约定。从Web的角度来看,WebForms确实是奇怪的鸭子。我的猜测是,大多数Web程序员在选择ASP.NET MVC方面比在WebForms上要快得多。


5

在ASP.NET WebForms上使用ASP.NET MVC的主要原因是可测试性。当然,您可以对WebForms进行单元测试,但这需要模拟框架并且需要很多工作。第二个原因是MVC确实使分离关注点变得容易一些。这可以提供大量的代码重用,并使您的代码松散耦合。这并不意味着不可能在ASP.NET中使用MVP之类的模式来做同样的事情。

MVC的缺点是您失去了很多功能,并且在过去十年中(几乎)已经内置到WebForms中。自创建以来,MVC已经走了很长一段路,以提供类似的功能。

就性能而言,是否有人能证明一种技术“更快”?

我认为没有一个比另一个更好。我确实很喜欢MVC框架,并且已经成功使用了MVC框架,但是我始终确保选择与项目相匹配的技术。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.