首页 > 代码库 > study Mvc step by step (一) 什么是Mvc啊?

study Mvc step by step (一) 什么是Mvc啊?

       当我们开始逐步把Net平台上面的Web开发从webform过度到MVC 开发的时候。我们总想弄清楚Mvc到底是什么??其实Mvc并不是Net特有的一种开发技术。而是一种软件开发的模式。早在上个世界80年代。Xerox PARC为编程语言Smalltalk-80发明的一种软件设计模式,已被广泛使用。那么什么是Mvc呢?

   MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:
  • Model(模型)表示应用程序核心(比如数据库记录列表)。
  • View(视图)显示数据(数据库记录)。
  • Controller(控制器)处理输入(写入数据库记录)。

    MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。
    Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。   通常模型对象负责在数据库中存取数据。
    View(视图)是应用程序中处理数据显示的部分。   通常视图是依据模型数据创建的。
    Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
 
   看了上述描述,似乎似懂非懂。好吧,我们就用我们习惯的webform来演示一下所谓的什么是Mvc。
 
    首先我们创建一个空的Web网站 内有三个文件 如图1.1所示
 
   一个Model类(在站点新建 xxx.cs通常放入app_Code这个不允许外部访问的文件夹下面)。
   一个MvcController的一般处理程序。(.ashx)
   一个叫做View的普通html页面。(.html)
 
 
 
 

      我在以上三个文件一次写入代码:

model.cs

using System;using System.Collections.Generic;using System.Linq;using System.Web;/// <summary>/// Model 的摘要说明/// </summary>public class Model{    public Model()    {        //        // TODO: 在此处添加构造函数逻辑        //    }    public int Id { set; get; }  //身份证号码    public string Name { set; get; }//姓名    public int Age { set; get; }//年纪    public bool Gender { set; get; }//性别    public string Address { set; get; }//地址    public string Phone { set; get; }//电话号码    public string Email { set; get; }//电子邮箱    public string company { set; get; }//公司}
View Code


view.html

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>    <title></title>    <style>        form        {            margin-left:auto;            margin-right:auto;            width:500px;        }    </style></head><body>     <form>      <table>        <tr>            <td>身份证号码:</td>            <td>@id</td>        </tr>          <tr>              <td>姓名:</td>              <td>@name</td>          </tr>          <tr><td>年纪:</td>              <td>@age</td>          </tr>                  <tr>              <td>电话号码:</td>              <td>@phone</td>          </tr>          <tr>              <td>电子邮箱:</td>              <td>                  @email              </td>          </tr>          <tr>              <td>家庭住址:</td>              <td>@address</td>          </tr>          <tr>              <td>                  公司名称:              </td>              <td>                  @company              </td>          </tr>      </table>  </form></body></html>

MvcController.ashx

<%@ WebHandler Language="C#" Class="MvcController" %>using System;using System.Web;public class MvcController : IHttpHandler {        public void ProcessRequest (HttpContext context) {        context.Response.ContentType = "text/Html";//返回http响应头        Model m = new Model() { Id=410102, Name="Rocky Ren", Age=28, Gender=false, Phone="18301412747", Email="renyanlei2005@aliyun.com", company="河南云和数据",  Address="河南省郑州市", };//model实体文件。得到model并且初始化里面的各个属性。        string ViewPath = context.Server.MapPath("view.html");//得到View的静态页面路径        string ViewHtml = System.IO.File.ReadAllText(ViewPath);//得到View的静态页面Html字符串        ViewHtml = ViewHtml.Replace("@id",m.Id.ToString()).Replace("@name",m.Name).Replace("@age",m.Age.ToString()).Replace("@phone",m.Phone).Replace("@company",m.company).Replace("@email",m.Email).Replace("@address",m.Address);//利用Model实体对象逐一替换掉view.html里面所有@XX的值。        context.Response.Write(ViewHtml);//输出给前台页面                                      }     public bool IsReusable {        get {            return false;        }    }}
View Code

 

首先我们看一下页面效果。请求MvcController


    当我们的浏览器请求MvcController的时候。一个http请求经过我们的net处理程序到达具有实现了IHttpHandler接口的类就是我们的一般处理程序。这个接口有一个有一个方法 public void ProcessRequest (HttpContext context)   在咱们NET当中所有的处理请求都是由这个方法来处理的,其中参数HttpContext包含了我们的请求响应的处理。

     通过上图中,大家看到我们的MvcController这个类里面的方法 ProcessRequest 里面即处理了返回页面所需求的数据。又通过找到html页面并且装载数据返回了动态的Html内容。

      M:model.cs  载数据的容器。提供应用程序的数据项目。

      V:view.html  前台展示页面。返回给浏览器的内容。

      C:处理页面请求和返回http请求的执行。

 

 

MVC的本质就是将处理和显示隔离。把项目分成model view和controller,这种任务分离(亦称关注点分离)