文章转发自:http://www.admin10000.com/document/535.html  

我们平时总是将三层架构与MVC混为一谈,殊不知它俩并不是一个概念。下面我来为大家揭晓我所知道的一些真相。

首先,它俩根本不是一个概念。

  三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目。

  MVC是一个设计模式,它是根据项目的具体需求来决定是否适用于该项目。

  那么架构跟设计模式有什么区别呢?

  我们从接手一个项目开始,首先,我们需要进行架构设计,一般我们采用的就是分层式的架构设计,即我们的三层架构。

  然后,在确定了架构以后,我们再根据项目的具体需求去考虑是否需要应用一些设计模式,比如是否应用我们的MVC模式,抽象工厂模式等等。(在这里我们看出,MVC与三层架构不是一个等级的,而与抽象工厂等设计模式才是一路的)

  最后,确定了模式以后,就是我们的一些具体的实现了。(当然一个项目不仅仅考虑这些问题,我只是为了说明两者的区别,将其他问题已省略)

其次,它俩划分的层次不同。

  三层架构将整个项目划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。

  MVC 即Model(模型),View(视图),Controller(控制)。

  下面看一下他俩的区别与联系:

  通过这个图我们可以知道,我们平常所说的V是UI,C是BLL,M是DAL的观点是错误的。

  而我们通常所见到的MVC一般也都是在应用三层架构的基础上,即将Model层再进行分层。而如果Model不再进行划分的话,那么使用MVC的意义也就不大了。

然后,它俩的目的着重点不同。

  三层架构的目的着重点是“高内聚,低耦合”,即解耦。

  MVC的目的则是实现Web系统的职能分工,即职责划分。

  其实职责划分也是解耦,但是三层侧重的是整体的一个解耦,而MVC侧重的是web系统的解耦,即侧重jsp和Servlet的一个解耦。

最后,为何我们会将其混为一谈?

  既然两者有这么多的不同,我们为什么还总是将其混淆呢,下面我列举了几个我们常常将其混为一谈的几个原因:

  1.二者都是“三层”。

  这个原因是最容易迷惑我们初学者的,一个是UI,BLL,DAL,一个是View,Controller,Model,不都是三层吗?

  虽然都是“三层”(不一定是真的三层,还可以是多层),但是它们的划分的不一样。大家可从上面的图中看出不同。

  2.MVC总是伴随着三层架构。

  这个就是我在前面一再强调的,我们一般是在考虑使用(也可以不使用)了三层架构的基础上再根据具体需求决定是否需要使用MVC,于是我们常说的MVC中总是伴随着三层架构,所以大家总是会认为MVC就是三层架构,三层架构就是MVC,殊不知,它们二者是一起出现的。

  3.都是在分层,即都是在解耦。

  前面说它们目的的时候也说了,虽然它们的侧重点不同,但是它们的总体目的是一样的,都是为了解耦,对于初学者而言,是不知道这两个侧重点有何不同的。

  大家往往对它们的联系知道很多,不然也不会混为一谈,但是对它们的区别却知道较少,希望我上面讲解的它们两者之间的区别可以让大家对它们有些了解,如有写的不妥的地方,请指教。

三层架构与MVC之间的区别的更多相关文章

  1. [转]三层架构与MVC之间的区别

    我们平时总是将三层架构与MVC混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真相. 首先,它俩根本不是一个概念. 三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目. ...

  2. (转)浅析三层架构与MVC模式的区别

    MVC模式介绍: MVC全名是Model ViewController,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据 ...

  3. 三层架构和MVC

    注:本文章内所有内容都来自互联网,本人主要是起了一个收集的作用 http://www.cnblogs.com/zhhh/archive/2011/06/10/2077519.html 又看到有人在问三 ...

  4. Web项目的三层架构和MVC架构异同

    http://www.cnblogs.com/zhhh/archive/2011/06/10/2077519.html 又看到有人在问三层架构和MVC的关系,感觉这种问题有点教条化了.因为它们都在逻辑 ...

  5. [1] [转]软件架构之三层架构和MVC的关系

    注:本文章内所有内容都来自互联网,本人主要是起了一个收集的作用 又看到有人在问三层架构和MVC的关系,感觉这种问题有点教条化了.因为它们都在逻辑上将应用程序划为三块,凑了一个数字3,就有人非要把它们联 ...

  6. Django——WEB三层架构与MVC

    而我发此文的目的有二:一者,让初学者能够听到一家之言,是为解惑:二者,更希望抛砖引玉,得到专家的批判. 许多学生经常问我,MVC到底和WEB三层架构有啥关系? 开始时,我也只能给他们一些模糊的回答.时 ...

  7. 三层架构与MVC的区别

    我们平时总是将混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真相. 首先,它俩根本不是一个概念. 三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目. MVC是一个设 ...

  8. asp.net中三层架构与mvc之区别?

    对于标题中的问题,如果是没有同时接触三层架构和mvc的初级.net开发人员,想必一定会非常糊涂和混淆.关于此我也百度过N回,看过N多帖子和 回答,但几乎没有人能表述清楚.近期我从典型mvc+entit ...

  9. 关于三层架构与MVC的一些理解

    刚毕业的时候,参与了一个上位机的系统开发.上位机所使用的是.net Windows Form技术. 当时,和一个北理的姑娘在一个项目组里.因为她来公司时间比较长,而且经验比较丰富,所以,上位机的架构由 ...

随机推荐

  1. salesforce 零基础学习(三十一)关于LookUp字段点击Save时的Validation

    今天在群里大概遇到了这样一个问题,明明这个User存在,但是save的时候提示信息说Value不存在,大概的意思如下图所示,目前认为这种问题常见的可能情况有两种. 一.此字段设置Validation ...

  2. iOS----ARC(自动内存管理)

    1.ARC是什么呢,有什么用? ARC是苹果官方推出的帮助我们苹果开发工程师管理内存的一种自动内存管理机制,它的前身是MRC,也就是手动内存管理: 2.ARC的基本原理是什么? ARC是编译器(时)特 ...

  3. JS工具

       /*** @author Direction*/ /*** JALJA 命名空间 namespace*/var JALJA= {} ; /*** Interface Class* 接口类需要2个 ...

  4. cordova编译报错:Execution failed for task ':processDebugResources'

    cordova编译报错:Execution failed for task ':processDebugResources' 引发这个错误的最扩祸首就是一个中文命名的文件,不知道什么时候加入的,我写了 ...

  5. vuejs切换视图同时保持状态

    vuejs切换视图同时保持状态 http://cn.vuejs.org/guide/components.html#动态组件 动态组件 多个组件可以使用同一个挂载点,然后动态地在它们之间切换.使用保留 ...

  6. 《PHP Manual》阅读笔记3 —— 类与对象

    1.PHP 中的所有函数和类都具有全局作用域,可以定义在一个函数之内而在之外调用,反之亦然. PHP 不支持函数重载,也不可能取消定义或者重定义已声明的函数. 当一个函数是有条件被定义时,必须在调用函 ...

  7. java中异常注意问题(发生在多态是的异常问题)

    /* 异常的注意事项: 1,子类在覆盖父类方法时,父类的方法如果抛出了异常,那么子类的方法只能抛出父类的异常或者该异常的子类. 2,如果父类抛出多个异常,那么子类只能抛出父类异常的子集. 简单说:子类 ...

  8. IOS开发-KVO

    一.什么是kvo? key-value observing,观察者模式 观察者,观察对象属性的变化,当被观察者该属性发生变化时,观察者会接收到通知,可以在回调函数中做相应的处理 二.有什么作用? 变化 ...

  9. Azure ARM (5) ARM Template初探 - 本地JSON Template文件(1)

    <Windows Azure Platform 系列文章目录>      Azure ARM (1) 概览      Azure ARM (2) 概览      Azure ARM (3) ...

  10. 【数据压缩】LZ77算法原理及实现

    1. 引言 LZ77算法是采用字典做数据压缩的算法,由以色列的两位大神Jacob Ziv与Abraham Lempel在1977年发表的论文<A Universal Algorithm for ...