首页 > 技术文章 > mvc模式

lijingwen-99 2017-06-19 20:05 原文

一、什么是MVC

    1、概念

        MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

        小编点睛:架构,主要还是采用封装(分层)的思想,来降低耦合度,从而使我们的系统更加的灵活,扩展性更好。

    2、内容

      Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。数据库中存取数据。
      View(视图)是应用程序中处理数据显示的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据

        小编点睛:

 

          

    大大提高了代码的可重用性。
       (2)由于MVC的三个模块相互独立,改变其中一个不会影响其他两个,所以依据这种设计思想(3)此外,4、缺点

       (1)增加了系统结构和实现的复杂性。

          对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
  (2)视图与控制器间的过于紧密的连接。

           视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
  (3)视图对模型数据的低效率访问。

             依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
  (4) 目前,一般高级的界面工具或构造器不支持MVC架构。

              改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成使用MVC的困难

        小编点睛:根据MVC的优缺点,我们知道,对于开发存在大量用户界面,并且业务逻辑复杂的大型应用程序,MVC将会使你的软件在健壮性、代码重用和结构方面上一个新的台阶。尽管在最初构建MVC框架时会花费一定的工作量,但从长远角度看,它会大大提高后期软件开发的效率。

        所以我们在具体适用时,要综合考虑其适用范围,

二、工作原理

    1、web工作原理图



        小编点睛:

       小编点睛:   2、内部工作原理图

                                       

        小编点睛:上边这张图是MVC的处理过程:3、小例子        (1)先在model层写一个Dog实体类

 

[csharp] view plain copy
  1. public class Dog  
  2. {  
  3.     public int ID { get; set; }  
  4.     public string Name { get; set; }  
  5.   
  6.     public override string ToString()  
  7.     {  
  8.         return "ID=" + this.ID +",Name=" + this.Name ;  
  9.     }  
  10. }  


       (2)先在controller层写相应的代码

 

[csharp] view plain copy
  1. //控制器类(继承了Controller)  
  2.    public class HomeController : Controller  
  3.    {  
  4.        #region 0.1初始化数据集合 void IntData()  
  5.        /// <summary>  
  6.        /// 初始化数据集合  
  7.        /// </summary>  
  8.        public List<Models.Dog> IntData()  
  9.        {  
  10.            List<Models.Dog> list =new List<Models.Dog >()  {  
  11.                new Dog(){ ID=1,Name ="小样~~" },  
  12.                new Dog(){ ID=2,Name ="小样2~~" },  
  13.                new Dog(){ ID=3,Name ="小样3~~" },  
  14.                new Dog(){ ID=4,Name ="小样4~~" },  
  15.            };  
  16.            return list;  
  17.        }  
  18.  
  19.        #endregion  
  20.   
  21.        // GET: /Home/  
  22.        /// <summary>  
  23.        /// Action方法(可堪称MVC设计模式的Model  
  24.        /// </summary>  
  25.        /// <returns></returns>  
  26.        public ActionResult Index()  
  27.        {  
  28.            System.Text.StringBuilder sbHtml = new System.Text.StringBuilder(4000);  
  29.            //2.1处理当前业务(比如读取数据库。判断等)  
  30.            //2.1.1创建一个数据集合(伪数据,并获得数据  
  31.            List<Models.Dog> list = IntData();  
  32.            //2.1.2遍历集合,生成HTNL代码,存入builder  
  33.            list.ForEach (d => {  
  34.                sbHtml.Append("<div>" + d.ToString() + "</div>");  
  35.                  
  36.            });  
  37.            //2.2使用viewBag传输数据给同名Index.cshtml 视图  
  38.            //viewBag是一个dynamic类型集合,可以动态添加任意类型的任意名称的属性和值  
  39.            ViewBag.HtmlStr = sbHtml.ToString();  
  40.   
  41.            return View();  
  42.        }  
  43.    }  


       (3)最后在view层显示数据

 

[csharp] view plain copy
  1. @{  
  2.     Layout = null;  
  3. }  
  4.   
  5. <!DOCTYPE html>  
  6.   
  7. <html>  
  8. <head>  
  9.     <meta name="viewport" content ="width=device-width" />  
  10.     <title>Index</title>  
  11. </head>  
  12. <body>  
  13.     <!-- 相当于把Action中的内容,存放在此处 输出!-->  
  14.     @Html.Raw(ViewBag.HtmlStr)  
  15. </body>  
  16. </html>  


       (4)运行效果图

                                

推荐阅读