可以说,在未来几年中,Web form的使用会逐渐减少,而取而代之的就是MVC。可能你不会同意我的观点,那么我就试着阐述一下我的观点,如果你还是不能接受,那么请你反驳我。

学习一个新语言或者是新架构是需要时间的,我们需要摒弃原来学习的很深入并且用的很熟练的架构来迎合新架构嘛?是的,如果让我说,我的回答是否,但是我需要看清这个新架构究竟和原来的架构有哪些改进,是否真的需要我们投入大量的时间去学习?Mvc 是一种架构模式,它带来了全新的和asp时代同样的开发体验(注:我不是说这是倒退)。

下面我就来阐述一下对于Web form,MVC是否值得我们去学习。

1.View State

相信大家对于这个视图状态都很熟悉,它是用来保存我们在页面中输入的数据状态,以便我们可以在刷新页面或者回发时使页面回到我们原来的输入数据时的状态,这个效果很好的实现了我们的需求。但是同时,我们要问自己一下,是否我们就真的需要这些,需要页面刷新时显示原来的数据,这是否是有意义的?

还有就是View State在web form时代大行其道,在每个页面都会存在,甚至在复杂的页面中他的大小甚至很大,在每次 页面回发时都会传递View State状态,我们不说服务器解析这些View State需要时间,就是每次页面传输都要传递这些View State就会使带宽增加,显示网页的时间变长。这在2.0时代,最起码是我所不允许的。

2.Page Life Cycle 页面生命周期

在Web form中存在着复杂的生命周期,我甚至清楚的记得在我学习Web form的时候,都是拿着笔在纸上画着这些周期图,在每个周期页面会执行什么动作。这就像我在学习c#连接数据库的时候写sql helper,让我很头疼。例如在Page_render()中不应该访问具体的控件,因为这时控件还没有生成,如果要访问请在Page_load()中,我们每天都要和Page_Load()事件打交道,至少我很经常。IsPostBack是经常可以见到的方法。

如果你觉得你可以完全掌握这些生命周期,那么至少你是一名大牛。如果你可以很随意的就控制页面的生命周期,并且控制控件的生成,那么我会很敬仰你。

3.False sense of concerns 失败的关注点分离

现在我们做软件,讲究的都是可维护性、可重用性以及关注点分离。何为关注点分离,我的理解就是每层结构只负责他自己的事情,不属于他的不能控制,也不要试图控制。例如,我们在code behind中写了访问数据库的代码,调用了sql helper中的类,但是现在是数据库服务器的服务没有开启,那么这次调用肯定会抛出异常。难道让我们在code behind中处理这些异常,那么我们程序员会累死的,异常应该是sql helper中处理,而不是code behind。这应该就是所谓的关注点分离。还有就是关注点分离应该是每个类只负责他自己的工作,而不要在一个类Sql Helper中有着返回html的语句出现。

4.Limited control over HTML 对于html的控制极差

我在页面生命周期中说了,如果你可以随意的更改生成的控件,那么我会崇拜你。如果说对于一个服务器端控件可以控制生成html的样式,或者生成html的ID、name,以便可以让js使用,这是很困难的。当然在.net 4.0中添加了一个属性,那就是ClientIDMode,如果把这个属性值设置为static,就可以生成和定义的ID一样的html的ID值。默认情况下这是不被启用的,会生成复杂的、嵌套的ID值。这对于我们在客户端操作html标签是很困难的。

当然了,这不是你可以转向MVC的原因,但是是原因之一,虽然这个原因可能会有点牵强。

5.Leaky abstraction 脆弱的抽象

Web form试图隐藏所有的http状态(http的无记忆性或者是无状态性)。我们在拖入一个服务器控件的时候从来需要考虑他会在什么时候显示?因为服务器控件已经实现了这些,例如,IsPostBack 方法为什么可以用来判断页面是否回发,它的实现原理是什么?我们不会关心,我们只关心这个方法能够完成什么,这就够了?真的够了吗?

我认为没有,只是会使用,我想任何一个只要认识英文的人都可以完成,但是会使用就够了吗?性能问题达到了吗?会出现哪些问题?我们都不知道,我们只是用了一个黑盒子,但是里面是什么东西我们不知道?如果是陷阱我们也会毫不犹豫的跳进去?对吗?

偶尔的熟悉一下源码,对于提升我们自己的开发水平有帮助之外,我们也可以发现很多我们可以控制的问题,避免他们发生?所以,亲爱的朋友们,不要仅仅限于使用,有时候大牛和小牛的根本区别就是小牛不知道为什么要这样?而大牛指导如何更好的这样。

6.Low testability 极差的可测试性

我在以前开发web form的时候,采用服务器控件可以大大的提高开发速度。但是,我从来不知道如何去测试我开发的代码是否运行正常。唯一的方式就是自己一个人没事的时候点击、点击、再点击。还有就是设置断点,按住F11,不断的点击键盘,直到看到这些代码都想吐的地步?

但是在MVC中,这些问题都不再存在,因为我们可以使用Nunit等可以进行单元测试的工具,我们可以把测试精确到每一行代码,我们可以实现测试的自动化,避免了手动点击浪费的大量时间。这是一件好事,不是吗?

还有我个人认为最重要的一个原因就是,你如果有web form的开发基础,那么学习MVC可以说就是很简单的事情,因为MVC中没有了服务器控件,有的只是html标签以及一些可以生成html标签的helper类。我个人感觉做美工的如果想转开发,这倒是不错的时机,因为html对于美工来说笔程序员更熟悉。

在MVC中没有View State,可以对html进行完全的控制,可以不再使用原来的Url rewriter,而是采用MVC中自带的Route(Url路由系统),良好的关注点分离框架(Model、View、Controller),每一层都是负责自己的任务。

在MVC中不是每一个地址都会对一个一个具体的页面,你可以定义多个Action,返回同一个页面。在MVC中因为有了强大的路由系统,所以我们不会再见到www.cnblogs.com/default.aspx,这样的地址了,而是取而代之的www.cnblogs.com/home/index ,这是一个巨大的突破。可以让特定的页面具有具体的含义。这是URl友好,你认为呢?

我并不是说MVC会取代Web form,而是他们之间的对比性,当然如果可以避免一些问题的存在,那么让MVC和Web from共存在同一个项目中,或许是不一个不错的选择。但是前提还是需要你学习MVC,我个人认为在未来几年中,Web form和MVC会共存。

好了,说了这么多,我只是有一句话,就是如果你想在未来的Web开发中不落后,那么就在业余时间学习一下MVC吧。

如果你想你的网站具有更好的可维护性,那么采用MVC是你的明智之举。

以上只是我的个人所言,请各位参考!!

每天进步一点,一年就会进步一大步,十年就可以成功,君子当自强不息,君子当好好学习,每天进步。

原文链接:http://www.cnblogs.com/jiagoushi/archive/2012/12/09/2810552.html

为什么要从Web form过渡到MVC中的更多相关文章

  1. Web Form 和asp.net mvc 差别

    Asp.net MVC 和web Form的基本区别 Web Form ASP.NET MVC 视图和逻辑紧密耦合 视图和逻辑分离 页面(给予文件的URL) 控制器(基于路由的URL) 状态管理(视图 ...

  2. 添加asp.net mvc到现有的asp.net web form 应用程序

    前言 asp.net mvc的前一版本为asp.net web Form(Asp.net mvc之前称为asp.net),其第一个版本与2002年年初发布.asp.net web form 属于.ne ...

  3. asp.net mvc中html helper的一大优势

    刚上手这个框架,发现其中的html helper用起来很方便,让我们这些从web form 过渡来的coder有一种使用控件的快感,嘻嘻! 言归正传,我要说的是在使用它时,系统会自动执行表单的现场恢复 ...

  4. ASP.NET MVC与ASP.NET Web Form简单区别与适用场景

    概论: Asp.net  微软 提供web开发框架或者技术.分Web Form和ASP.NET MVC.下面简单说明各自优缺点及使用场景. Web Form 优点: 1.支持丰富的服务器控件.如:Gr ...

  5. ASP.NET Web Form和MVC中防止F5刷新引起的重复提交问题

    转载 http://www.cnblogs.com/hiteddy/archive/2012/03/29/Prevent_Resubmit_When_Refresh_Reload_In_ASP_NET ...

  6. 转载ASP.NET MVC 和ASP.NET Web Form简单区别

    转载原地址 http://www.cnblogs.com/lei2007/p/3315431.html 概论: Asp.net  微软 提供web开发框架或者技术.分Web Form和ASP.NET  ...

  7. web form中自定义HttpHandler仿mvc

    web form中自定义HttpHandler仿mvc 前言 在mvc大行其道的今天,仍然有不少公司的项目还是使用web form来实现的(其实mvc也是基于web form的),如果要在项目中引入m ...

  8. 关于asp.net web form 和 asp.net mvc 的区别

    asp.net web forms 有什么缺陷? 1.视图状态臃肿:服务器和客户端传输过程中包含了大量的试图状态——在现在的web程序中甚至多达几百kb,而且每次往返都会请求,导致服务器请求带宽增加, ...

  9. ASP.NET MVC与ASP.NET Web Form简单区别

    概论: Asp.net  微软 提供web开发框架或者技术.分Web Form和ASP.NET MVC.下面简单说明各自优缺点及使用场景. Web Form 优点: 1.支持丰富的服务器控件.如:Gr ...

随机推荐

  1. Solution -「HDU 6643」Ridiculous Netizens

    \(\mathcal{Description}\)   Link.   给定一棵含有 \(n\) 个结点的树,点 \(u\) 有点权 \(w_u\),求树上非空连通块的数量,使得连通块内点权积 \(\ ...

  2. Solution -「CCO 2019」「洛谷 P5532」Sirtet

    \(\mathcal{Description}\)   Link.   在一个 \(n\times m\) 的网格图中,每个格子上是空白 . 或沙子 #,四联通的沙子会连成一个整体.令此时所有沙子块同 ...

  3. C#操作读写INI配置文件

    一个完整的INI文件格式由节(section).键(key).值(value)组成.示例如:[section]key1=value1key2=value2; 备注:value的值不要太长,理论上最多不 ...

  4. iNeuOS工业互联网操作系统,顺利从NetCore3.1升级到Net6的过程汇报

    目       录 1..... 概述... 1 2..... 升级的工程... 3 3..... 升级的代码差异... 4 4..... 系统运行... 5 1.   概述 我们团队一直在工业领域从 ...

  5. Vue3学习(十五)之 级联选择组件Cascader的使用

    写在前面 好像又过去了一周,依旧是什么也没产出,不是懒,而是心情不好,什么也不想干,失眠是常事. 应该是从今年开始,突然感觉博客园就像是我自己的日记一样,承载着自己的喜怒哀乐和酸甜苦辣咸,当然,尴尬的 ...

  6. 对于计算正确率时 logits.argmax(dim=1),torch.eq(pre_label,label)

    额  好像是一句非常简单的代码 ,但是作为新手 ,我是完全看不懂哎 前十眼. 首先 这里的logits是一个 (a,b)维的张量.其中a是你的全连接输出维度,b是一个batch中的样本数量. 我们经过 ...

  7. Golang 包管理机制

    Golang 包管理机制 1. 历史 在go1.11之前, 并没有官方的包管理机制(Godep算个半官方), 主流的包管理机制有: GoVendor Glide Godep 在go1.11之后, 官方 ...

  8. 国内商业智能软件的天下来了,选择BI工具我们应该看这3点!

    ​数据变革时代,经常有"外行人"问到,何谓商业智能BI? BI可以说是通过软件或者服务,将网络时代中海量的数据转化为行动上的洞察力,从而影响企业的战略和战术决策. 当海量.高增长率 ...

  9. 【C# 线程】RPC中常见的Stub| marshalling怎么理解

    RPC服务的基本架构图如上,可以很清楚地看到,一个完整的RPC架构里面包含了四个核心的组件,分别是Client ,Server,Client Stub以及Server Stub,这个Stub大家可以理 ...

  10. windows 应用商店常用软件

    QuickLook 这个应用可以让你,用空格键查看几乎任何文件的信息. 例如快速查看图片,播放视频,阅读 PDF 等等,支持的格式多到吓人.  Python 没错,就是那个非常火的编程语言,Pytho ...