浅析MVC模式与三层架构的区别

浅析MVC模式与三层架构的区别数据库

    三层架构和MVC是有明显区别的,MVC应该是表现模式(三个加起来之后才是三层架构中的UI层)。三层架构(3-tier application) 一般意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。设计模式

一、表现层(UI):通俗讲就是展示给用户的界面,即用户在使用一个系统的时候他的所见所得。服务器

二、业务逻辑层(BLL):针对具体问题的操做,也能够说是对数据层的操做,对数据业务逻辑处理。架构

三、数据访问层(DAL):该层所作事务直接操做数据库,针对数据的增添、删除、修改、更新、查找等。app

MVC Model-View-Controller,严格说这三个加起来之后才是三层架构中的UI层,也就是说,MVC把三层架构中的UI层再度进行了分化,分红了控制器、视图、实体三个部分,控制器完成页面逻辑,经过实体来与界面层完成通话;而C层直接与三层中的BLL进行对话。框架

MVC能够是三层中的一个表现层框架,属于表现层。三层和MVC能够共存。测试

三层是基于业务逻辑来分的,而MVC是基于页面来分的。网站

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

曾把MVC模式和Web开发中的三层结构的概念混为一谈,直到今天才发现一直是个人理解错误。MVC模式是GUI界面开发的指导模式,基于表现层分离的思想把程序分为三大部分:Model-View-Controller,呈三角形结构。Model是指数据以及应用程序逻辑,View是指 Model的视图,也就是用户界面。这二者都很好理解,关键点在于Controller的角色以及三者之间的关系。在MVC模式中,Controller和View同属于表现层,一般成对出现。Controller被设计为处理用户交互的逻辑。一个一般的误解是认为Controller负责处理View和Model的交互,而实际上View和Model之间是能够直接通讯的。因为用户的交互一般会涉及到Model的改变和View的更新,因此这些能够认为是Controller的反作用。对象

MVC是表现层的架构,MVCModel其实是ViewModel,即供View进行展现的数据。 ViewModel不包含业务逻辑,也不包含数据读取。

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

MVC原本是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可使用不一样的表现形式。好比一批统计数据你能够分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。

MVC如何工做

MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分红三个核心部件:模型、视图、控制器。它们各自处理本身的任务。

视图V

视图是用户看到并与之交互的界面。对老式的Web应用程序来讲,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Macromedia Flash和象XHTML,XML/XSL,WML等一些标识语言和Web services.

如何处理应用程序的界面变得愈来愈有挑战性。MVC一个大的好处是它能为你的应用程序处理不少不一样的视图。在视图中其实没有真正的处理发生,无论这些数据是联机存储的仍是一个雇员列表,做为视图来说,它只是做为一种输出数据并容许用户操纵的方式。

模型M

模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。因为应用于模型的代码只需写一次就能够被多个视图重用,因此减小了代码的重复性。

控制器C

控制器接受用户的输入并调用模型和视图去完成用户的需求。因此当单击Web页面中的超连接和发送HTML表单时,控制器自己不输出任何东西和作任何处理。它只是接收请求并决定调用哪一个模型构件去处理请求,而后再肯定用哪一个视图来显示返回的数据。

模型Model:模型是应用程序的主体部分。模型表示业务数据,或者业务逻辑. 实现具体的业务逻辑、状态管理的功能。

视图View:视图是应用程序中用户界面相关的部分,是用户看到并与之交互的界面。 就是与用户实现交互的页面,一般实现数据的输入和输出功能。

控制器Controller:控制器工做就是根据用户的输入,控制用户界面数据显示和更新model对象状态。起到控制整个业务流程的做用,实现View层跟Model层的协同工做。

三层架构指:表现层(显示层) 业务逻辑层数据访问层(持久化)若是你们非要“生搬硬套”把它和MVC扯上关系话那我就只能在这里"强扭这个瓜"了即:

V三层架构中"表现层",aspx页面对应MVC中View(继承的类不同)

C三层架构中"表现层"的aspx.cs页面(类)对应MVC中的Controller,理解这一点并不难,你们想想咱们之前写过的 Redirect,固然它自己就是跳转了一些连接页面,而MVC中的Controller要作的更爽,它控制并显示输出了一个视图。即然所起到的做用都是对业务流程和显示信息的控制,只不过是实现手段不一样而已。

M三层架构中业务逻辑层和数据访问层对应MVC中Model(一定View和Controller已找到“婆家”剩下Model只能是业务逻辑层和数据访问层了)

为何要使用 MVC

大部分Web应用程序都是用像ASP,PHP,或者CFML这样的过程化(自PHP5.0版本后已全面支持面向对象模型)语言来建立的。它们将像数据库查询语句这样的数据层代码和像HTML这样的表示层代码混在一块儿。经验比较丰富的开发者会将数据从表示层分离开来,但这一般不是很容易作到的,它须要精心的计划和不断的尝试。MVC从根本上强制性的将它们分开。尽管构造MVC应用程序须要一些额外的工做,可是它给咱们带来的好处是无庸质疑的。

首先,最重要的一点是多个视图能共享一个模型,如今须要用愈来愈多的方式来访问你的应用程序。对此,其中一个解决之道是使用MVC,不管你的用户想要Flash界面或是 WAP 界面;用一个模型就能处理它们。因为你已经将数据和业务规则从表示层分开,因此你能够最大化的重用你的代码了。

因为模型返回的数据没有进行格式化,因此一样的构件能被不一样界面使用。例如,不少数据可能用HTML来表示,可是它们也有可能要用Adobe Flash和WAP来表示。模型也有状态管理和数据持久性处理的功能,例如,基于会话的购物车和电子商务过程也能被Flash网站或者无线联网的应用程序所重用。

由于模型是自包含的,而且与控制器和视图相分离,因此很容易改变你的应用程序的数据层和业务规则。若是你想把你的数据库从MySQL移植到Oracle,或者改变你的基于RDBMS数据源到LDAP,只需改变你的模型便可。一旦你正确的实现了模型,无论你的数据来自数据库或是LDAP服务器,视图将会正确的显示它们。因为运用MVC的应用程序的三个部件是相互独立,改变其中一个不会影响其它两个,因此依据这种设计思想你能构造良好的松耦合的构件。

对我来讲,控制器也提供了一个好处,就是可使用控制器来联接不一样的模型和视图去完成用户的需求,这样控制器能够为构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器能够根据用户的需求选择模型进行处理,而后选择视图将处理结果显示给用户。

拿一个简单的登录模块说,需求是你输入一个用户名、密码,若是输入的跟预先定义好的同样,那么就进入到正确页面,若是不同,就提示个错误信息“你Y别在这儿蒙我,输入的不对!”。

V 这个小小的模块中,起始的输入用户名密码的页面跟通过校验后显示的页面就至关于View

C 而这里还须要一个Controller页面,就是用于接收输入进来的用户名密码,还有通过校验后返回的一个flg(此flg就是用于判断你输入的是否正确,而跳转到相应的页面的)

M 最后还缺一个Model,那么就是你那个用于校验的类了,他就是处理你输入的是否跟预先订好的同样不同的,以后返回一个flg。

这样就彻底实现了逻辑跟页面的分离,我页面无论你咋整,反正我就一个显示,而Controller呢也无论你Model咋判断对不对,反正我给你了用户名跟密码,你就得给我整回来一个flg来,而Medol呢,则是反正你敢给我个用户名跟密码,我就给你整过去个flg

M 提供数据、数据之间的关系、转化等,并能够通知视图和控制器本身哪些地方发生了变化。

V 提供显示,能根据M的改变来更新本身。

C 好比视图作了点击一个按钮,会先发给这个视图的控制器,而后这个控制器来决定作什么操做(让模型更新数据,控制视图改变)

MVC是一个复合模式

MV,MC都是观察者模式

M内部的组件组合模式

VC之间是策略模式(能够随时更换不一样的控制器)

 ---------------------------------------------------------------------------------------------------------------

MVC模式是上世纪70年代提出,最初用于Smalltalk平台上的。

MVC是表现模式,是用来向用户展示的许多组建的一个模式(UI/Presentation Patten)。

MVC有三种角色:

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

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

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

MVC概述:协做

存在单向引用,例如Model不知道View和Controller的存在。View不知道Controller的存在。这就隔离了表现和数据。View和controller是单向引用。而实际中View和Controller也是有数据交互的。

MVC的重要特色是分离。两种分离:

View和数据(Model)的分离

使用不一样的View对相同的数据进行展现;分离可视和不可视的组件,可以对Model进行独立测试。由于分离了可视组件减小了外部依赖利于测试。(数据库也是一种外部组件)

View和表现逻辑(Controller)的分离

Controller是一个表现逻辑的组件,并不是一个业务逻辑组件。MVC能够做为表现模式也能够做为建构模式,意味这Controller也能够是业务逻辑。分离逻辑和具体展现,可以对逻辑进行独立测试。

MVC和三层架构

MVC与三层架构相似么?

View-UI Layer  |   Controller-Bussiness Layer  |  Model-Data Access Layer

其实这样是错误的,MVC是表现模式(Presentation Pattern),三层架构是典型的架构模式(Architecture Pattern),三层架构的分层模式是典型的上下关系,上层依赖于下层。但MVC做为表现模式是不存在上下关系的,而是相互协做关系。即便将MVC看成架构模式,也不是分层模式。MVC和三层架构基本没有可比性,是应用于不一样领域的技术。

MVC模式与三层架构:

 

相关文章
相关标签/搜索