为什么MVC比Webform更好一些?

Posted 悦码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么MVC比Webform更好一些?相关的知识,希望对你有一定的参考价值。

MVC与WebForm的区别

  • 什么是MVC?


MVC其实就是一种软件架构模式,也就是我们经常说的设计模式。其中主要包括三个模块,就是如MVC名字所显示的那样:模型(Model),视图(View),控制器(Controller);

  • 什么是WebForm

为什么MVC比Webform更好一些?


ASP.NETWebform提供了一个类似于Winform的事件响应GUI模型(event-drivenGUI),隐藏了HTTP、htmljavascript等细节,将用户界面构建成一个服务器端的树结构控件(Control),每个控件通过ViewState保持自己的状态,并自动把客户端的js事件和服务器端的事件联系起来。这种做法使得开发WinForm和WebForm程序具有相近的开发体验,填平WinForm开发(有状态、面向对象的)和WebForm开发(无状态、面向HTML的)之间的鸿沟;

  • WebForm网站和MVC网站运行机制的区别

WebForm网站:

  1. 首先浏览器会向目的服务器发送请求报文;配置过IIS的都知道,网站挂载在服务器上,我们是通过访问虚拟目录的方式访问网站的。这时候目的主机的IIS接收的是访问该虚拟目录下Default.aspx文件的请求;

  2. 服务器端的IIS软件接收到请求后,把请求交给.NET FramWork进行处理;

  3. .NET FramWork会创建Default_aspx类的对象,也就是我们所说的页面对象;

  4. 返回给浏览器;

MVC网站:

  1. 浏览器向服务器发送Request请求报文;

  2. 服务器端的IIS相应Request请求;

  3. .NET FramWork根据路由配置,解析URL,并创建FirstPage类的对象,并调用相应的Default方法;

  4. 然后会访问视图文件夹下的Default.cshtml,返回给浏览器(其中包括html,css,js等等);

为什么MVC比Webform更好一些?


Webform的优缺点

  • WebForm 优点

1、支持事件模型开发。得益于丰富的服务器端组件,webfrom开发可以迅速的搭建web应用;

2、使用方便,入门容易;

3、控件丰富;

  • WebFrom 缺点

1、封装太强,很多底层东西让我们初学者不是很明白;

2、入门容易,提升很难;

3、复杂的生命周期模型学习起来并不容易;

4、控制不灵活;

5、ViewState处理;

MVC的优缺点

  • MVC优点

1、很容易将复杂的应用分成M、V、C三个组件模型。通过model、view和controller有效的简化了复杂的架构,体现了很好的隔离原则;

2、因为没有使用server-based forms 。所以我们程序员控 制的更加灵活,页面加干净;

3、可以控制生成自定义的url。对于seo友好的url更是不在话下;

4、强类型View实现,更安全、更可靠、更高效;

5、让web开发可以专注于某一层,有利于开发中的分工,更利于分工配合适用于大型架构开发;

6、很多企业已经使用MVC作为项目开发框架,招聘明确要求熟悉MVC开发模式,我现在做的项目架构就是mvc+ef+wcf+…

7、松耦合、易于扩展和维护;

8、有利于组件的重用;

9、ASP.NET MVC更好的支持单元测试;

10、在团队开发模式下表现更出众,MVC 代码和页面彻底分离,WebForm:codebehind技术没有完全对代码和前台页面进行分离;

  • MVC缺点

需要有一定的html、css、js、jquery前端技术,也就增加了一些学习的成本;

MVC比Webform对比

为什么MVC比Webform更好一些?


MVC更加有利于理解分层逻辑,把握代码的层次感,Controller到aspx页面之间的过程已经被框架隔离;至于Controller或者View页面与Model调用的过程,还是需要自己来把握;ASP.NET的MVC框架实现了Controller代码的单独管理。

WebForm则只在HttpHandler容器中执行,对其进行分层,在大的方面缺乏支持,而只能依靠逻辑上分离,并不是不能分离,而是有一定的局限性;HttpHandler的拦截,是跟访问后缀名有关的,当请求一个页面时,那就是一个Handler,而WebForm模型实现显示与逻辑分离,才有的是WinForm的事件驱动,显然,事件必须被注册到页面里,比如Button1_Click这样的代码,而在Button1_Click执行之前,Page_Load方法会被执行;显示代码被写入Page_Load方法中,那么就会造成需要写额外的废代码,比如if (!Page.IsPostBack)这样的判定,而在Button1_Click执行后需要显示的部分,则比较难处理,写出另一个方法,也是必须要在Button1_Click里调用的,替代的解决方案是使用Response.Redirect,在一个aspx页面中处理逻辑,处理完就跳转到另外一个显示的页面;这样做的坏处是,在两个页面中数据很难共享,而跳转是通过标记302来实现,因此多一次请求;而另外还可以通过Server.Execute,Server.Transfer或者Context.RewritePath这样的处理方式,则两个页面转换是在服务器端完成,可以共享数据,可以说和MVC框架的处理方式大同小异,缺点是需要手动配置这些重新定向的属性。


总结

MVC框架具有很强的优越性,而WebForm也不是一无是处,在简单的应用中更加容易开发。WebForm也是可以实现和MVC一样的分层方式,只是处理时需要多写一些代码而已。而我认为,在用WebForm开发分层遇到的最大问题是页面与页面之间数据的传递问题,而掌握好WebForm中使用服务器端跳转的应用技巧进行开发就可以解决数据传输问题,ASP.NET MVC与WebForm比较起来,WebForm更容易理解,不会产生复杂的配置,也是一个很不错的选择。


以上是关于为什么MVC比Webform更好一些?的主要内容,如果未能解决你的问题,请参考以下文章

.net web开发有WEBFORM、MVC、EF等来开发,它们各有啥优点和缺点?

什么是winform界面

Asp.net mvc和asp.net有啥区别?

打造 高性能,轻量级的 webform框架-----如何替换webform的垃圾控件(第一天)

求asp.net webform 工作的流程

什么是winform界面