ASP.Net MVC与ASP.Net表格

Ego*_*hin 8 asp.net asp.net-mvc

为什么要考虑将ASP.Net MVC或标准ASP.Net与Web项目的表单和控件一起使用?除个人喜好外,原因是什么?您认为哪种项目更适合MVC以及适用于普通ASP.Net的项目?

您会考虑将您当前的项目转移到其中一个项目吗?

J.C*_*.C. 13

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框架之间共享的所有功能.


Ada*_*lph 8

WebForms是一种抽象,它隐藏了开发人员的Web机制.它允许桌面开发人员相对容易地将他们的技能转移到Web上.虽然它确实部分地实现了这一点,但在实际情况下,通常不久之后抽象就会中断并且必须采用凌乱的解决方法.单元测试很困难,因为处理用户交互的逻辑与UI紧密耦合.典型的WebForms应用程序生成的HTML远非最佳.它通常是膨胀的,难以阅读并且包含大量内容,这些内容仅用于允许抽象工作,例如viewstate,这是一个巨大的信息块,可以帮助抽象向开发人员提供状态错觉,即使网络是一种无国籍的媒介.

然而,MVC包含了网络的机制.在Web请求和响应中发生的基本操作作为简单的抽象呈现给开发人员.MVC明确区分了关注点.该模型仅表示与系统相关的业务对象或实体,以及用于检索和存储这些对象的实例的方法.控制器接受Web请求,对模型执行操作,然后将模型交给视图.该视图纯粹是一个渲染器,用于将模型呈现给用户并公开允许用户制定下一个传递给控制器​​的请求的接口项.这种关注点分离允许相对容易的单元测试.开发人员可以完全控制所生成的HTML,并且不需要存在其他工件(例如viewstate).

我更喜欢MVC.在极少数情况下,使用Webforms可能很有用,例如快速原型或演示,但我总是建议使用MVC.

至于将项目从Webforms转移到MVC,这显然是非常主观的,取决于应用程序本身和预算约束,但总的来说,我认为这是朝着正确方向迈出的一步.