MVC和WebForm区别

WebForm的理解

1、 WebForm概念

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

2、WebForm 请求流程

比如访问 http://www.qidian.com/Default.aspx

1、Http请求(物理地址:Default.aspx)

①发送请求: 浏览器向服务器发送请求报文,此时由IIS虚拟目录接收。(通过配置过IIS,把网站挂载在服务器上,通过访问虚拟目录的方式访问网站的。)

②转交请求: 服务器端的IIS软件接收到请求后,把请求交给.NET FrameWork进行处理。

③创建页面类对象:.NET FrameWork根据请求的地址index.aspx,会创建对应的index_aspx类的对象(页面对象)。

IIS的内部机制:

实现一个IHttphandler的接口

该接口实现一个ProcessRequest方法

该方法会调用对应页面的Page_load方法

处理的业务逻辑或者是访问数据库的代码

要输出的Html或者其它内容

2、返回给浏览器

①转交回复: 通过IIS传输出给浏览器,要输出的html元素或其他内容(html+js+css等)

②解析为图形界面:浏览器解析html代码,并翻译为图形化界面

如图:

 

2、 WebForm的优点:

1.   有大量的服务器控件支持,比如:GridView、Repeater等控件可以方便的进行数据绑定,从而减少的大量代码的编写。

2.   学习成本低,由于微软封装的比较深,造成深入学习的难度加大。

3.   基于事件驱动编程,如:click事件等,aspx和cs文件分离,即显示逻辑和处理逻辑分离。

4.   支持视图状态,每个控件以“隐藏域”的形式存在当前表单页面未达到“有状态”,即ViewState。

3、 WebForm的缺点

1.   由于使用的ViewState会增加页面的负担,造成性能不是很高。

2.   代码重用性不高,缺少对并行开发的支持,

3.   因为采用code-behind 代码后植技术,使aspx页面与cs紧密耦合度太高。

4.   对Seo不友好,因为URL指定具体的aspx页面。

5.   因为紧密耦合度太高、使用大量的事件处理函数,不利于单元测试。

二、       MVC的理解

1、 MVC的概念

Asp.netMvc架构模式是一种 低耦合、可测试的web应用程序框架,它是基于CLR和成熟的MVC架构构建的。ASP.NET MVC不支持ViewState和服务器控件。

2、 MVC的请求流程

比如访问:http://www.google.com.hk/FirstPage/Default

1、Http请求(逻辑地址:FirstPage/Default)

①发送请求(FirstPage/Default)

②转交请求(同上)

③创建类对象+方法

.NET FrameWork根据路由配置,解析URL,并创建news类的对象,并调用对象的index方法。通过View方法加载视图,然后访问视图文件夹下的index.cshtml

2、返回给浏览器

如图:

 

3、 MVC的优点

1.   架构降低了程序间的耦合性。

2.   不支持ViewState,页面更加干净,可以提升程序的性能。

3.   支持并行开发,可扩展性好,继承了asp.net的特性,表单验证、缓存、会话等。

4.   由于程序耦合度低,可以比较顺利的进行单元测试。

5.   通过修改路由规则,可以控制生成自定义的url,因此控制生成seo友好的url将更加容易。

6.   强类型view实现,更安全,更高效。

4、 MVC的缺点

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

MVC和WebForm的选择场景

新开发的项目建议采用MVC。

想要快速开发的中小型项目可以选择WebForm。

比较关注单元测试、性能、SEO、代码重用性的话建议采用MVC。

最后结语

MVC和WebForm都有自己的优缺点,目前两种技术都存在,证明都有自己的价值,虽然现在MVC应用越来越广发,我们不能一味的否定WebForm。一个高级程序员用WebForm实现的网站性能并不一定比初级程序员用MVC实现的网站性能差,最重要的还是努力提升自己的技术能力才是王道!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PWN-PRACTICE-CTFSHOW-2

PWN-PRACTICE-CTFSHOW-2pwn05pwn06pwn0701栈溢出之ret2textpwn05 栈溢出,覆盖返回地址为后门函数getFlag起始地址即可 # -*- coding:utf-8 -*- from pwn import * context.log_level"debug" #ioprocess("./pwn1") ioremote("pwn.challen…

VMware Pro 15 安装 Deepin15.9 国产操作系统详细教程

Deepin是由武汉深之度科技有限公司开发的Linux发行版,个人认为其界面设计非常美观,而且作为国产操作系统,值得我们去体验和支持! 文章目录1.下载安装 VMware Workstation Pro 152.下载 Deepin15.9 系统3.在 VMware 中创建虚拟机4.…

Asp.Net WebForm生命周期的详解

一.http://Asp.Net页面生命周期的概念 当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端IIS)发送一个request请求,服务器就会判断发送过来的请求页面,当完全识别 TTP页面处理程序类后&…

PWN-PRACTICE-CTFSHOW-3

PWN-PRACTICE-CTFSHOW-3pwn10萌新赛-签到题萌新赛-数学99内部赛-签到题pwn10 格式化字符串漏洞,覆写num为16即可打印出flag # -*- coding:utf-8 -*- from pwn import * context.log_level"debug" #ioprocess("./pwn1") ioremote("pwn.ch…

Python PEP8 代码规范常见问题及解决方法

之前一直用 Python IDLE 写代码,最近换成 PyCharm 写代码总是会出现波浪号,这才了解到 Python 的 PEP8 代码规范,所以将常见的 PEP8 代码规范问题和解决方法记录一下,学习一下,遇到了再持续更新,养成良好的…

基于.NET平台的分层架构实战(一)——综述

通过浏览博客园的文章发现,很多朋友对分层架构特别感兴趣,刚好我刚做完的毕业设计就是专门研究.NET平台上分层架构的(题目叫“基于.NET平台的分层架构与设计模式应用研究”)。通过做这篇论文,我对分层架构有了一定的了…

Eclipse 通过 JDBC 连接 SQL Server

文章目录1.配置 SQL Server 20122.开启 Telnet 服务3.测试1433端口是否打开4.下载JDBC5.Eclipse 连接 SQL Server6.测试连接本文用到的软件版本以及相关环境: Eclipse Photon Release (4.8.0) JDK-10.0.2 SQL Server 2012 1.配置 SQL Server 2012 打开 SQL Server …

PWN-PRACTICE-CTFSHOW-4

PWN-PRACTICE-CTFSHOW-4BJDCTF2020-babyrouterBJDCTF2020-babystackBJDCTF2020-dizzyBJDCTF2020-encryptde stackBJDCTF2020-babyrouter 栈溢出,ret2libc # -*- coding:utf-8 -*- from pwn import * context.log_level"debug" #ioprocess("./pwn1&…

SQL Server 登录更换【Windows身份验证】为【SQL Server 身份验证】

1、安装好 SQL Server 后,使用 Windows 身份验证登陆SQL,然后在服务器上右键,选择【属性】,在弹出的窗口中选择【安全性】,在服务器身份验证项里勾选【SQL Server 和 Windows 身份验证模式】,点击确定保存 …

基于.NET平台的分层架构实战(二)——需求分析与数据库设计

基于.NET平台的分层架构实战(五)——接口的设计与实现 基于.NET平台的分层架构实战(四)——实体类的设计与实现 基于.NET平台的分层架构实战(三)——架构概要设计 基于.NET平台的分层架构实战&#xff0…

PWN-PRACTICE-CTFSHOW-5

PWN-PRACTICE-CTFSHOW-5BJDCTF2020-router36D杯-签到36D杯-babyFmtstr36D杯-MagicStringBJDCTF2020-router 36D杯-签到 栈溢出&#xff0c;用ROPgadget找到一个"sh"字符串&#xff0c;ROP&#xff0c;程序过滤了cat和空格&#xff0c;more<flag绕过即可 # -*- c…

Hexo 博客自定义一个不使用主题模板渲染的独立页面

2022-01-25 更新&#xff1a;博客新地址&#xff1a;https://www.itbob.cn/&#xff0c;文章距上次编辑时间较远&#xff0c;部分内容可能已经过时&#xff01; Hexo 是一个轻量、快速&#xff0c;简单和强大的博客框架&#xff0c;当我们需要发布博文的时候&#xff0c;只需要…

log4net部分配置说明

第一步&#xff1a; 添加并应用Log4net.dll。然后在Web.config文件中添加下面的配置局 <configSections> <section name"log4net" type"log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> 第二步…

网站ICP备案和公安备案流程

2022-01-25 更新&#xff1a;博客新地址&#xff1a;https://www.itbob.cn/&#xff0c;文章距上次编辑时间较远&#xff0c;部分内容可能已经过时&#xff01; 文章目录-- ICP备案 1、填写信息验证备案类型2、产品验证3、填写网站信息4、上传资料5、人脸核验或幕布拍照核验6、…

PWN-PRACTICE-CTFSHOW-6

PWN-PRACTICE-CTFSHOW-636D杯-MengxinStack36D杯-tang1024杯-1024_happy_stack1024杯-1024_happy_checkin36D杯-MengxinStack 程序开了canary和PIE保护 泄露远程libc版本&#xff0c;为 libc6_2.23-0ubuntu10_amd64.so from pwn import * ioremote("pwn.challenge.ctf.s…

CSS 与其预处理语言 Sass、Less、Stylus 之间的转化

预处理语言的由来&#xff1a;CSS 是一门非程序式语言&#xff0c;没有变量、函数、SCOPE&#xff08;作用域&#xff09;&#xff0c;需要书写大量看似没有逻辑的代码&#xff0c;不方便维护及扩 展&#xff0c;不利于复用&#xff0c;为了让 CSS 富有逻辑性&#xff0c;短板不…

7款免费原型设计工具

身为一位产品经理或设计师&#xff0c;原型设计工具是必不可少的工作伙伴。但我们难免会遇到预算有限的时候&#xff0c;这时候&#xff0c;去哪里寻找一款好用的免费原型设计工具呢&#xff1f;以下&#xff0c;小编为大家精心挑选了7款免费的原型工具&#xff0c;并对其进行了…

PWN-PRACTICE-CTFSHOW-7

PWN-PRACTICE-CTFSHOW-7大吉大利杯-easyrop大牛杯-guess吃鸡杯-win_pwn吃鸡杯-easy_canary大吉大利杯-easyrop 栈溢出&#xff0c;SROP # -*- coding:utf-8 -*- from pwn import * context.log_level"debug" context.arch"amd64" #32位和64位的sigframe结…

【译】谨慎使用CSS中的波浪选择器

最近我的一些项目都遇到了一些类似的样式问题。它们都错误地使用了波浪选择器&#xff0c;并造成了很多地方的CSS代码臃肿( CSS Bloat )。大家可能以前也都遇到或者使用过波浪选择器&#xff0c;毕竟它作为CSS选择器已经很长时间了&#xff0c; 甚至IE7都支持 。波浪选择器用来…

HTML + CSS 实现 GitHub 项目标签、徽章样式

经常会在GitHub上项目介绍的README.md文件中看到许多漂亮的标签&#xff0c;这些标签可以显示version、stars、license等信息 我们可以通过 https://shields.io/ 这个网站在线制作图标&#xff0c;填写label、message、color三个字段&#xff0c;点击Make Badge就可以生成图标…