首页 > 代码库 > mvc模式
mvc模式
一、什么是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实体类
- public class Dog
- {
- public int ID { get; set; }
- public string Name { get; set; }
- public override string ToString()
- {
- return "ID=" + this.ID +",Name=" + this.Name ;
- }
- }
(2)先在controller层写相应的代码
- //控制器类(继承了Controller)
- public class HomeController : Controller
- {
- #region 0.1初始化数据集合 void IntData()
- /// <summary>
- /// 初始化数据集合
- /// </summary>
- public List<Models.Dog> IntData()
- {
- List<Models.Dog> list =new List<Models.Dog >() {
- new Dog(){ ID=1,Name ="小样~~" },
- new Dog(){ ID=2,Name ="小样2~~" },
- new Dog(){ ID=3,Name ="小样3~~" },
- new Dog(){ ID=4,Name ="小样4~~" },
- };
- return list;
- }
- #endregion
- // GET: /Home/
- /// <summary>
- /// Action方法(可堪称MVC设计模式的Model
- /// </summary>
- /// <returns></returns>
- public ActionResult Index()
- {
- System.Text.StringBuilder sbHtml = new System.Text.StringBuilder(4000);
- //2.1处理当前业务(比如读取数据库。判断等)
- //2.1.1创建一个数据集合(伪数据,并获得数据
- List<Models.Dog> list = IntData();
- //2.1.2遍历集合,生成HTNL代码,存入builder
- list.ForEach (d => {
- sbHtml.Append("<div>" + d.ToString() + "</div>");
- });
- //2.2使用viewBag传输数据给同名Index.cshtml 视图
- //viewBag是一个dynamic类型集合,可以动态添加任意类型的任意名称的属性和值
- ViewBag.HtmlStr = sbHtml.ToString();
- return View();
- }
- }
(3)最后在view层显示数据
- @{
- Layout = null;
- }
- <!DOCTYPE html>
- <html>
- <head>
- <meta name="viewport" content ="width=device-width" />
- <title>Index</title>
- </head>
- <body>
- <!-- 相当于把Action中的内容,存放在此处 输出!-->
- @Html.Raw(ViewBag.HtmlStr)
- </body>
- </html>
(4)运行效果图
mvc模式