MVC(转载)

 

  MVC模式介绍:

MVC全名是Model ViewController,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法,这个方法的假设前提是若是业务逻辑被汇集到一个部件里面,并且界面和用户围绕数据的交互能被改进和个性化定制而不须要从新编写业务逻辑MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。数据库

MVC是表现层的架构,MVC的Model其实是View Model,即供View进行展现的数据。 View Model不包含业务逻辑,也不包含数据读取。 而在N层架构中,通常还会有一个Model层,用来与数据库的表相对应,也就是所谓ORM中的O。这个Model多是POCO,也多是包含一些验证逻辑的实体类,通常也不包含数据读取。进行数据读取的是数据访问层。而做为UI层的MVC通常不直接操做数据访问层,中间会有一个业务逻辑层封装业务逻辑、调用数据访问层。UI层(Controller)经过业务逻辑层来获得数据(Model),并进行封装(View Model),而后选择相应的View。
设计模式

MVC有三种角色:

Model:用来储存数据的组件(与领域模型概念不一样,二者会相互交叉)安全

 

View:从Model中获取数据进行内容展现的组件。一样的Model在不一样的View下可展现不一样的效果。获取Model的状态,而不对其进行操做。架构

Controller:接受并处理用户指令(操做Model(业务)),选择一个View进行操做app

 

MVC主要用于表现层,3层主要用于体系架构,3层通常是表现层、中间层、数据层,其中表现层又能够分红M、V、C,(Model View Controller)模型-视图-控制器。框架

MVC模式是一种复合设计模式,一种在特定场合用于解决某种实际问题来得出的能够反复实践的解决方案。巧合的是他也有三个事物组成,因而乎人们就有了一种想固然的对应关系:展现层-View;业务逻辑层-Control;持久层-Model。首先MVC中的三个事物之间并不存在明显的层次结构,没有明显的向下依赖关系,相反的,View和Model每每是比较独立的,而Control是链接二者的桥梁,他们更像是横向的切分。这样一来就出现一个结果,MVC中每一个块都是能够独立测试的,而三层结构中,上层模块的运行测试势必要提供下层代码或者提供相同接口的桩。相对来讲,MVC复杂得多,可是结构更清晰,耦合性更低。测试

另外,MVC中每一块内部特别是Model内部常常被设计为多层的。在我认为的一个良好的MVC模式构建的结构中,Control是核心,小且较为稳定的,能够做为一个核心框架来提供,有扩展点,但基本上能够简单配置不须要任何代码就能够运行。而View则多是一套或多种可选择的视图引擎,决定了软件展现给用户的界面,使用时的主要工做量在于扩展点以及根据须要而数量不一样的视图模板。Model则是业务提供者,决定了软件提供的功能,其内部多是一些普通的类或者是实现了某些接口的类,在这一块当中可能根据业务的不一样而色彩缤纷,对于复杂的软件可能会分红不少层,如业务逻辑层、业务提供层、系统提供层、数据提供层、数据访问层等。加密

列举生活中的实例具体说明MVC

比喻MVC的例子是小时候玩的那种卡带式游戏机,Control是主机,通常来讲我买一个主机就好了,只要他不坏,他就能一直让我玩这一类的游戏。View则是电视机和游戏手柄,电视机能够独立工做,他无论输入的是电视信号、影碟机信号仍是游戏机信号,他只管显示,并且他决定了咱们看到的效果是怎么样的,若是我想要个尺寸更大的或者彩色的显示效果,我只须要买个相应的电视机就好了,手柄也是能够换的,遥杆仍是带震动的。Model则是游戏卡带,他决定了我玩的是什么游戏,是魂斗罗仍是超级玛莉,并且游戏机主机和电视机生产厂家永远也不知道在上面有可能会运行什么样的游戏。卡带中可能会有游戏代码和存储单元,都根据游戏的须要而设计。spa

有朋友提到游戏主机提供的卡带插槽的接口,在设计中,有时也由Control提供一组接口,以用于Model或View的实现,这样就造成了依赖。通常来讲这样设计也没有太大的问题,只是会提升模块间的耦合度,也会带来一些侵入性。为了更完美,能够不用接口来提供契约,能够用配置信息(或称元数据信息)+反射来提供契约,那么这个类接口就能够退化到只要符合CLS就能够了,也就是普通的类,就像如今的计算机接口普遍采用USB,不管是U盘、打印机、扫描仪或者是加密狗,他们都是普通的USB设备而已。设计

提到USB有一个题外话,模块的可插拔性设计甚至是热插拔设计,系统能够在不中止运行的状况下动态的挂载或移除模块,动态挂载模块须要系统可以自动发现新模块并根据自描述的信息进行自动配置,移除可能状况更复杂一点,须要"安全删除硬件"相似的功能。

在设计普遍重用的框架时会考虑多种状况以达到更大的适应性,通常项目中应用MVC模式能够较为随意。

 

下图是MVC组件类型的关系和功能图:

 

 

介绍完三层架构和MVC模式后,接下来回归主题,开始介绍两者的区别:

MVC(模型Model-视图View-控制器Controller)是一种设计模式,咱们能够用它来建立在域对象和UI表示层对象之间的区分。

一样是架构级别的,相同的地方在于他们都有一个表示层,可是他们不一样的地方在于其余的两个层。

 

在三层架构中没有定义Controller的概念。这是我认为最不一样的地方。而MVC也没有把业务的逻辑访问当作两个层,这是采用三层架构或MVC搭建程序最主要的区别。固然了。在三层中也提到了Model,可是三层架构中Model的概念与MVC中Model的概念是不同的,“三层”中典型的Model层是已实体类构成的,而MVC里,则是由业务逻辑与访问数据组成的。

 

三层架构和MVC是有明显区别的,MVC应该是展示模式(三个加起来之后才是三层架构中的UI层) 三层架构(3-tier application) 一般意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。 MVC是 Model-View-Controller,严格说这三个加起来之后才是三层架构中的UI层,也就是说,MVC把三层架构中的UI层再度进行了分化,分红了控制器、视图、实体三个部分,控制器完成页面逻辑,经过实体来与界面层完成通话;而C层直接与三层中的BLL进行对话。 MVC能够是三层中的一个表现层框架,属于表现层。三层和MVC能够共存。三层是基于业务逻辑来分的,而MVC是基于页面来分的。

 

MVC和三层之间的关系,见下图:

 

 

相关文章
相关标签/搜索