你的位置:首页 > 软件开发 > ASP.net > 重温MVC基础入门

重温MVC基础入门

发布时间:2016-04-25 17:00:17
简介本文主要是作者回顾MVC基础的文章,整合个人认为基础且重点的信息,通过简单实践进行复习。相关代码地址:https://github.com/OtherRuan/Review-SerialsWebForm开始说MVC的时候不得不提下WebForm,熟悉两者的区别和优劣,能够更好 ...

简介

本文主要是作者回顾MVC基础的文章,整合个人认为基础且重点的信息,通过简单实践进行复习。

相关代码地址:https://github.com/OtherRuan/Review-Serials

WebForm

开始说MVC的时候不得不提下WebForm,熟悉两者的区别和优劣,能够更好的理解MVC。早些时候,开始做get='_blank'>asp.net开发的时候离不开webform的控件拖拽的方式开发,只需要拖拽系统的控件就能完成web页面,效率之快毋庸置疑。但是随之而来的是臃肿的应用程序,耦合度极高的前后端,ViewState大量占用带宽等问题,在当今越来越追求性能的背景下。WebForm也面临退伍的命运,就像Asp.Net5已经完全摒弃了WebForm的开发方式。

性能问题是WebForm最主要的问题,通过MVC与WebForm两者性能的对比,可以明显的看出WebForm性能上存在的问题。

1. 响应时间

 

重温MVC基础入门  (图片来源自:http://www.codeproject.com/Articles/866143/Learn-MVC-step-by-step-in-days-Day)

可以看出响应时间上WebForm是MVC的两倍,因为WebForm需要将控件进一步转换成html文本响应。如下流程

用户请求-->服务器控件-->转换成Html-->返回响应

2. 带宽消耗

重温MVC基础入门

由于服务器控件的状态变换控制是通过事件回发来完成的,而回发状态信息则保存在ViewState中,以达到减少开发时间。但是ViewState却大幅增加了页面的大小,从上图可以看到WebForm的页面大小比MVC要大2倍上下。

其他问题,如重写问题、单元测试问题等等

MVC

解决WebForm性能问题,从几个问题来看。首先,由于WebForm是由aspx和aspx.cs两者通过CodeBehind高度耦合,导致无法单元测试, 因此我们将二者独立开,即Controller。其次ViewState导致页面大,服务器控件多的情况下,加之难以重写的问题,因此前端采用纯Html方式,也就是View。以下是MVC的流程图

重温MVC基础入门

简要介绍几个内容:

1. Controller:也就是后端逻辑处理

2. View

  MVC通过创建ViewResult对象渲染View到响应包中。过程如下:

    a. ViewResult内部创新ViewPageActivator对象

    b. ViewResult选择正确的ViewEngine,将ViewPageActivator作为ViewEngine构造函数的参数

    c. ViewEngine创建View 对象

    d. ViewResult 触发 View对象的方法RenderView

  ViewResult和ActionResult的关系

  ActionResult是抽象类,ViewResult-->ViewResultBase-->ActionResult。 -->为继承关系

  ViewResult描述了完整的HTML响应,而ContentResult响应文本请求。

3. 数据对象Model在Controller与View之间的传递

  a. ViewState的使用

    ViewState是一个dictionary,Controller将数据Model对象添加到这个Dictionary中,View从中读取数据。

    ex. ViewState["Employee"] = new Employee();

  b. ViewBag的使用

    ViewBag.Employee = new Employee();

  c. ViewState和ViewBag的问题

    1) 性能问题

      ViewData的数据是Object,我们需要强制转换它。

    2) Type安全问题与Runtime编译时错误问题

      当发生强转出错时,我们会获取运行时错误信息。但是好的程序,应该要获取编译时错误

    3) 数据发送端与接收端没有必要联系

      由于controller和view是相互解耦的,这时如果view和controller是两个不同的程序员时,使用viewState就容易造成运行时错误,强转错误

 4. 理解强类型视图

  针对3.c指出的类型问题,我们可以采用强类型视图,预先定义好model对象的类型,避免发生转换错误。

@model MVCReview.Models.Employee@if(Model.Salary>15000){<span style="background-color:yellow">    Employee Salary: @Model.Salary.ToString("C")</span>}else{      <span style="background-color:green">        Employee Salary: @Model.Salary.ToString("C")</span>}

原标题:重温MVC基础入门

关键词:mvc

mvc
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。