使用一个优于另一个有什么好处?
ASP.net MVC的主要优点是:
启用对呈现的HTML的完全控制.
提供干净的关注点分离(SoC).
启用测试驱动开发(TDD).
与JavaScript框架轻松集成.
遵循网络无状态性质的设计.
支持SEO的RESTful网址.
没有ViewState和PostBack事件
ASP.net Web Form的主要优点是:
它提供RAD开发
面向winform开发的开发人员的简易开发模型.
ASP.NET Web Forms和MVC是Microsoft开发的两个Web框架 - 它们都是不错的选择.这两个Web框架都不会被其他框架替换,也没有计划将它们"合并"到一个框架中.微软并行提供持续的支持和开发,两者都不会"消失".
这些Web框架中的每一个都提供了优点/缺点 - 在开发Web应用程序时需要考虑其中一些.可以使用任一技术开发Web应用程序 - 它可以使特定应用程序的开发更容易选择一种技术而不是另一种技术,反之亦然.
ASP.NET Web窗体:
开发支持状态 •让人产生一种错觉,即Web应用程序知道用户一直在做什么,类似于Windows应用程序.即使"向导"功能更容易实现.Web表单可以很好地隐藏开发人员的大量复杂性.
快速应用程序开发(RAD) •能够"跳入"并开始提供Web表单.一些MVC社区对此提出异议,但微软推动了这一争议.最后,它归结为开发人员的专业水平以及他们所熟悉的内容.对于经验不足的开发人员而言,Web表单模型可能没有更少的学习曲线.
更大的控件工具箱 •ASP.NET Web窗体提供了更大更强大的工具箱(Web控件),而MVC提供了更原始的控件集,更多地依赖于通过jQuery(Javascript)的富客户端控件.
成熟 •它自2002年以来一直存在,并且有大量关于问题,问题等的信息.提供更多第三方控制 - 需要考虑现有的工具包.
ASP.NET MVC:
关注点分离(SoC) •从技术角度来看,MVC中的代码组织非常干净,有条理和细化,使得Web应用程序在功能方面的扩展变得更加容易(希望如此).从发展的角度促进优秀的设计.
更轻松地与客户端工具集成(丰富的用户界面工具) •Web应用程序比以往任何时候都越来越多地变得像您在桌面上看到的应用程序一样丰富.使用MVC,它使您能够比Web表单更轻松,更无缝地集成这些工具包(如jQuery).
搜索引擎优化(SEO)友好/无状态 •URL对搜索引擎更友好(即mywebapplication.com/users/ 1 - 检索ID为1的用户vs mywebapplication/users/getuser.aspx(会话中传递的id)).类似地,由于MVC是无状态的,这消除了从同一窗口产生多个Web浏览器的用户头痛(会话冲突).同样,MVC坚持无国界网络协议,而不是"反抗"它.
适用于需要高度控制的开发人员 •ASP.NET Web表单中的许多控件会自动生成您在呈现页面时看到的大部分原始HTML.这可能会给开发人员带来麻烦.使用MVC,它可以更好地完成对渲染内容的完全控制,并且没有任何意外.更重要的是,HTML表单通常比Web表单小得多,后者可以等同于性能提升 - 需要认真考虑.
测试驱动开发(TDD) •使用MVC,您可以更轻松地为Web方面创建测试.另外一层测试将为意外行为提供另一层防御.
身份验证,授权,配置,编译和部署是两个Web框架之间共享的所有功能.
任何一个足以记住经典ASP的人都会记住打开一个混合了html和javascript代码的页面的噩梦 - 即使是最小的页面也很难弄清楚它到底在做什么.我可能是错的,我希望我是,但MVC看起来像回到那些糟糕的旧时代.
当ASP.Net出现时,它被誉为救世主,将代码与内容分离,并允许我们让网页设计师创建HTML和编码器来处理背后的代码.如果我们不想使用ViewState,我们将其关闭.如果由于某种原因我们不想使用代码,我们可以将代码放在html中,就像经典ASP一样.如果我们不想使用PostBack,我们会重定向到另一个页面进行处理.如果我们不想使用ASP.Net控件,我们使用标准的html控件.如果我们不想在控件上使用ASP.Net runat ="server",我们甚至可以询问Response对象.
现在,一个有着极大智慧的人(可能是那些从未编写过经典ASP的人)已经决定是时候回到将代码与内容混合的时代,并将其称为"关注点分离".当然,你可以创建更干净的HTML,但你可以使用经典的ASP.如果你的视图中有太多的代码,说"你没有正确编程"就像是说"如果你在经典ASP中编写结构良好且注释良好的代码,它就会比ASP.NET更清晰,更好"
如果我想回到混合代码与内容,我会看看使用PHP进行开发,这种开发具有更加成熟的环境.如果ASP.NET有这么多问题那么为什么不解决这些问题呢?
最后但并非最不重要的是,新的Razor引擎意味着更难区分html和代码.至少我们可以在ASP中查找开始和结束标记,即<%和%>,但现在唯一的指示是@符号.
可能是时候转移到PHP并等待另外10年,以便有人再次将代码与内容分开.
如果您正在与其他开发人员合作,例如PHP或JSP(我猜测它们) - 您将更容易在页面上转换或协作,因为您不会拥有所有那些"令人讨厌的"ASP.NET各地的事件和控制.
MVC的问题在于,即使对于"专家"来说,它也会耗费大量宝贵的时间并且需要付出很多努力.无论背后的技术如何,企业都受到"快速解决方案有效"的基本驱动.WebForms是一种节省时间和金钱的RAD技术.企业不接受任何需要更多时间的事情.
适当的AJAX,例如JSONResults没有部分页面回发废话.
没有viewstate +1
不重命名HTML ID.
清理HTML =没有膨胀,并且在渲染XHTML或符合标准的页面方面有着不错的表现.
没有更多生成的AXD javascript.
对我来说,最大的单一优势是模型,视图和控制器层之间的明确分离.它有助于从一开始就促进良好的设计.
我没有看到MVC优于ASP.Net的任何优势.10年前,微软提出了UIP(用户界面流程)作为MVC的答案.这是一个翻牌.我们当时用UIP做了一个大项目(4个开发人员,2个设计师,1个测试人员),这真是一场噩梦.
不要为了炒作而跳入潮流.上面列出的所有优点已经在Asp.Net中提供(在Asp.Net 4中有更好的调整[ Asp.Net 4中的新功能 ]).
如果您的开发团队或拥有Asp.Net的单一开发人员家庭坚持使用它并快速制作漂亮的产品以满足您的客户(谁为您的工作时间付费).MVC会耗费你宝贵的时间并产生与Asp.Net相同的结果:-)
弗朗西斯·沙纳汉,
你为什么称部分回发为"胡说八道"?这是Ajax的核心功能,在Atlas框架和Telerik等精彩的第三方控件中得到了很好的利用
我同意你对观点的看法.但是如果开发人员小心地禁用了viewstate,这可以大大减少呈现的HTML的大小,从而使页面变得轻量级.
仅在ASP.NET Web窗体模型中重命名了HTML Server控件,而不是纯HTML控件.无论它是什么,如果重命名,你为什么这么担心?我知道你想在客户端处理很多javascript事件,但如果你巧妙地设计你的网页,你绝对可以得到你想要的所有id
即使ASP.NET Web Forms符合XHTML标准,我也看不到任何膨胀.这不是我们为什么需要MVC模式的理由
再次,为什么你对AXD Javascript感到烦恼?为什么会伤到你?这不再是一个有效的理由
到目前为止,我是使用经典ASP.NET Web表单开发应用程序的粉丝.例如:如果要绑定下拉列表或gridview,则最多需要30分钟且不超过20行代码(当然最小).但是对于MVC,请与开发人员讨论它的痛苦程度.
MVC的最大缺点是我们将回到ASP的时代.还记得混合服务器代码和HTML的意大利面条代码??? 哦,天哪,尝试阅读混合了javascript,HTML,JQuery,CSS,服务器标签的MVC aspx页面,什么不是....任何机构都可以回答这个问题?
Web表单也可以从Telerik等第三方控制提供商的更成熟和支持中获益.
在webforms中你也可以手工渲染几乎整个html,除了viewstate,eventvalidation和类似的少数标签,可以使用PageAdapters删除.没有人强迫您使用GridView或其他具有错误html渲染输出的服务器端控件.
我想说MVC的最大优势就是速度!
接下来是强制分离关注.但是它并没有禁止你将整个BL和DAL逻辑放在Controller/Action中!它只是视图的分离,也可以在webforms中完成(例如MVP模式).人们提到mvc的很多东西都可以在webforms中完成,但需要额外的努力.
主要的区别是请求来到控制器,而不是视图,这两个层是分开的,没有像webforms一样通过部分类连接(aspx +代码后面)