mvc,英文名叫Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
初次遇见你--MVC小编总是会把你和以前学习过的三层和设计模式弄混,再此,小编查阅相关资料,接着,小编就对这些相似的知识点进行简单对比:
mvc pk 三层
三层架构界面层,业务逻辑层和数据访问层,很多人就通mvc里面的三个核心部件同三层架构等同起来,认为界面层等于View,业务逻辑层等于Controller,数据访问层等于Model,这是完全错误的,mvc设计模式解决的是页面代码,页面控制逻辑和数据耦合的问题,所以她首先属于界面层,比如mvc和structs都是界面层框架,mvc里面的controller是负责对界面进行控制的,比如,页面间跳转,显示逻辑等,三层架构里的业务逻辑层主要是对业务实体数据的加工,把加工后的数据传给页面显示,mvc里面的model只是数据实体,不具备增删改查的功能,她接收的数据是从业务逻辑层处理好传过来的数据,而三层架构里面的数据访问层是具有增删改查功能的,是直接对数据库操作的,为业务逻辑层提供数据支持,切忌mvc只是三层里面的界面层,不要混淆了哦。
mvc pk 设计模式
有很多小伙伴往往把框架模式和设计模式混淆,认为MVC是一种设计模式。实际上她们完全是不同的概念。
框架、设计模式这两个概念总容易被混淆,其实它们之间还是有区别的。框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。在软件生产中有三种级别的重用:内部重用,即在同一应用中能公共使用的抽象块;代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;应用框架的重用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的重用性。
框架与设计模式虽然相似,但却有着根本的不同。设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示;设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。可以说,框架是软件,而设计模式是软件的知识。
框架模式有哪些?
MVC、MTV、MVP、CBD、ORM等等;
框架有哪些?
C++语言的QT、MFC、gtk,Java语言的SSH 、SSI,php语言的 smarty(MVC模式),python语言的django(MTV模式)等等
设计模式有哪些?
工厂模式、适配器模式、策略模式等等简而言之:框架是大智慧,用来对软件设计进行分工;设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度。介绍完了大家的的区别和联系之后,回到今天博文的主角mvc,接着小编就来做一个简单的入门例子。
第一步:创建一个mvc的例子,如下图所示:
第二步:选择Internet应用程序:
接着,我们就开始编写代码,在model中新建一个Dog类,用于模拟数据,代码如下所示:
<span style="font-size:18px;"><span style="font-size:18px;">using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace mvcTest.Models { public class Dog { public int ID { get; set;} public string Name{ get; set;} public override string ToString() { return "ID=" + this.ID + ",Name=" + this.Name; } } }</span></span>
第三步:在Controllers文件夹下新建一个控制器,用于从获取数据,添加控制器的方法,右击Controllers,添加控制器即可,代码如下所示:
<span style="font-size:18px;"><span style="font-size:18px;">using mvcTest.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace mvcTest.Controllers { //控制器类(继承了Controller) public class HomeController : Controller { #region 初始化数据集合+void InitData() /// <summary> /// 初始化数据集合 /// </summary> public List<Models.Dog> InitData() { List<Models.Dog> list = new List<Models.Dog>() { new Dog(){ID=1,Name="小样1~~"}, new Dog(){ID=2,Name="小样2~~"}, new Dog(){ID=3,Name="小样3~~"}, new Dog(){ID=4,Name="小样4~~"} }; } #endregion //Action方法(可是看成是mvc设计模式的 Model) public ActionResult Index() { System.Text.StringBuilder sbHtml = new System.Text.StringBuilder(4000); //处理当前业务(比如读取数据库,判断等) //创建一个数据集合(伪数据),获取数据 List<Models.Dog> list = InitData(); //遍历集合,生成html代码,存入sbHtml list.ForEach(d => { sbHtml.AppendLine("<div>" + d.ToString() + "</div>"); }); //使用ViewBag传输数据给同名 Index.cshtml视图 //ViewBag是一个dynamic类型集合,可以动态添加任意类型的任意名称的属性和值 ViewBag.HtmlStr = sbHtml.ToString(); return View(); } } } </span></span>
第四步:添加视图,代码如下所示:
<span style="font-size:18px;"><span style="font-size:18px;">@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> </head> <body> <!--相当于把Action方法中保存的内容,放在此处输出! 默认Razor视图会将从后台输出的字符串里保护的《转义成&1t; 为了不转义,使用Row方法,来输出html标签源码!--> @Html.Raw(ViewBag.HtmlStr) </body> </html> </span></span>
至此,一个简单的mvc的例子就完成了。
小编寄语:该博文,小编简单的介绍了一下mvc的基础知识,以及使用mvc敲了一个简单的例子,并且对mvc和三层,以及mvc和以前学习过的设计模式进行了简单的对比,通过对mvc的学习,小编对这块知识的理解又加深了一点点,档案管理项目,未完,待续......