🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
方配.NET是基于MVC的架构,在引入MVC之前,我们来对Web从请求到响应的过程进行抽象:一个Web请求的全过程实际就是一个简单的输入和输出, 输入是Request包含的头信息、Cookie、表单数据等信息,输出是最后的HTML。这就好比放进去面粉,最后出来的是做好的馒头。但是从面粉变成馒头却要经历很多工序,这一道一道的工序,就组成了整个流程。 ### 1、为什么使用MVC? 在ASP.NET开发中,一般情况下,网站的前台程序不使用.NET控件模式,性能都得到了提升。.NET控件的开发方式比较有利于提高开发效率,提高模块的重用性,但缺陷是性能上会有一些损失,例如不用数据绑定,显然也就不必判断数据来源和转换数据类型,不用页面控件和控件事件等,也就避免了使用ViewState,此外.NET控件往往追求功能齐全,当你只需要一部分功能时,大量无用的代码同样会拖累性能。 ![](https://box.kancloud.cn/9306e5fb1e388f8fb3434a6e29a74fe9_348x384.png =348x384) 这张图会让您更直观地知道为什么MVC比WebForm好。 ASP.NET WebForm和ASP.NET MVC,很多开发者认为ASP.NET不同于MVC,事实上,MVC是一种架构模式,ASP.NET是一个开发框架。我们必须明确的是ASP.NET MVC是ASP.NET 技术的一个子集。ASP.NET MVC技术是ASP.NET技术和MVC模式的完美结合。 ![](https://box.kancloud.cn/fea56e364846c13728cec10dc4765c0c_396x229.png =396x229) #### 1.1、ASP.NET WebForm Behind Code的好处和存在的问题 ASP.NET WebForm是一个快速可视化的Web程序开发技术。也就是说,开发者简单地拖拽控件到窗体设计器上,VS就会在Behind Code(aspx.cs文件)生成代码。目的是使得开发者能够将精力集中在系统的业务逻辑处理中而非UI界面开发上。 ![](https://box.kancloud.cn/baf5ea5a50096626a4f610d9feaefc78_472x326.png =472x326) 换句话说,你向设计器中拖放一个Button按钮后,便可以在它的事件处理程序中编写代码了。 ![](https://box.kancloud.cn/c5424c1309a403563c577dd355b45aeb_577x252.png =577x252) ![](https://box.kancloud.cn/ef2e425ba790d74a08f81c059b106b9b_384x209.png =384x209) Behind Code文件就是开发者能够快速开发WebForm程序的关键,因为它封装了底层复杂的技术过程,如Event、Delegates、HTTP协议Post、Get以及Session管理等等,但正是Behind Code的工作方式给开发Web程序带来了很多严重问题。 Web网站最终是给终端用户使用的,终端用户带着特定的目的去访问一个网站,然后他们使用一些“行为动作”,如输入URL、点击提交按钮等等,来表达他们想要干什么。比如一个人去购物网站购物,那么他会通过类似点击购买按钮、右键或者在浏览器地址栏中输入URL 等行为来完成。正是因为以上这些行为的构成特点,所以Web程序选择使用HTTP协议,因为该协议包含了许多与之相似的动作诸如POST、GET、PUT以及DELETE等等,这些恰恰能更形象地表达终端用户的意图。这样很自然地,我们要是能够把用户的这些行为一一映射到我们程序方法上,这不仅会更有意义还会使项目架构更加清晰明了。 但是,WebForm无法这样去做。因为微软一直想推广WebForm的“可视化编程”的概念,所以最终选择了一个“基于视图”的解决方案去应对“基于行为”的需求。 ![](https://box.kancloud.cn/2dd13bb814f0d1cf647e985ca1a91f8b_532x283.png =532x283) 如上图所示,用户的“请求过程”呈现出一个古怪的路线。 * 终端用户通过POST/GET方式发送一个Request请求 * IIS服务器将该请求转到对应的视图(Page页面) * 视图初始化一个页面,开始页面生命周期,激发对应事件(如Page.Load),最终处理终端用户的行为(三层架构中,就是调用业务逻辑层、数据访问层进行处理) * 最终服务器将结果以HTML的形式Response给终端用户的浏览器 如上,微软搞出了一个“基于视图”的架构方案去应付一个“基于行为”的需求。换句话说,如果一个终端用户发出了一个“购买”的请求,那么该请求先被一个类似“Shopping.aspx”的页面进行处理,然后该页面再去通知类似“Shopping.aspx.cs”,接着开始一个复杂的页面生命周期,最后激发对应事件(Page.Load,Button.Click)进行请求处理然后将结果返回给终端用户。 ![](https://box.kancloud.cn/d230c5a6457225dfe37ac52330872264_461x176.png =461x176) 上面这个过程相当复杂繁琐,终端用户的任何一个请求都是需要先经过一个复杂的页面生命周期之后才能真正被处理。那么,我们创建一个“面向行为”的架构方案去取代“面向视图”怎么样? 如果我们先处理请求,然后再呈现视图给终端用户,这个流程是不是要更清楚明了一些呢?事实上,MVC就是这样做的,用户请求先被对应的Controller处理,然后再由后者呈现对应的View(附带Model)。 ### 2、什么是方配.NET MVC? 方配.NET MVC是方配独立开发的MVC开发架构,继承的ASP.NET MVC的所有优点,并优化ASP.NET MVC中复杂的部分,使开发基于MVC模式的.NET应用程式更加的方便。方配.NET MVC 也是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式: * Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。 * View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。 * Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。 ![](https://box.kancloud.cn/1059a85b3a69ac1207d132b8b743eb6a_579x427.jpg =579x427) 方配MVC控制器与视图关系都是一对多的关系,一个控制器可对应多个视图。 ![](https://box.kancloud.cn/78c798283bccb6b975561d0c2bca6694_568x246.png =568x246)