三层架构与MVC谜团之答案揭晓

2014-05-09  来源:本站原创  分类:编程  人气:4 

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

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

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

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

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

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

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

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

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

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

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

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

三层架构与MVC谜团之答案揭晓

通过这个图我们可以知道,我们平常所说的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谜团之答案揭晓 2014-05-09

    我们平时总是将三层架构与MVC混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真相. 首先,它俩根本不是一个概念. 三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目. MVC是一个设计模式,它是根据项目的具体需求来决定是否适用于该项目. 那么架构跟设计模式有什么区别呢? 我们从接手一个项目开始,首先,我们需要进行架构设计,一般我们采用的就是分层式的架构设计,即我们的三层架构. 然后,在确定了架构以后,我们再根据项目的具体需求去考虑是否需要应用一些设计模式,比如是

  • MVC与三层架构区别 2013-03-28

    我们平时总是将三层架构与MVC混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真相. 首先,它俩根本不是一个概念. 三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目. MVC是一个设计模式,它是根据项目的具体需求来决定是否适用于该项目. 那么架构跟设计模式有什么区别呢? 我们从接手一个项目开始,首先,我们需要进行架构设计,一般我们采用的就是分层式的架构设计,即我们的三层架构. 然后,在确定了架构以后,我们再根据项目的具体需求去考虑是否需要应用一些设计模式,比如是

  • ssi框架学习总结(mvc三层架构) 2014-06-17

    相信大家对于mvc的三层架构已经灰常熟悉了,在这就不细讲了,个人感觉ssi的框架结构还是比较典型的mvc三层架构,还是比较容易上手的 相信大家对于mvc的三层架构已经灰常熟悉了,在这就不细讲了,个人感觉ssi的框架结构还是比较典型的mvc三层架构,还是比较容易上手的.关于这块的入门我想特别感谢下FrankHui童鞋,在他的帮助下,我才能比较快滴熟悉了这个架构,对我学习ssi的框架还是很有帮助滴.ssi的框架主要是由struts2,spring以及ibatis组成,他们负责各层之间的交互与协作,从

  • 辨析三层架构MVC与MVP 2012-11-21

    辨析三层架构MVC与MVP MVC架构大家在熟悉不过了,Model,View,Controller.不过在这里我再简单的介绍一下,在MVC里,View是可以直接访问Model的!从而,View里会包含Model信息,补课避免的还要包括一些业务逻辑.(在MVC业务逻辑的地方是值得注意的!!).在MV模型里,更关注的Model的不变,而同时有对个对Model的不同显示,及View.所以在MVC模型里,Model不依赖与View.(这句是废话,MVC分三层就是为了解耦,怎么还会有依赖).但是呢,Vie

  • 浅谈MVC.ASP.NETMVC和三层架构的区别 2013-03-16

    MVC 目前流行的软件设计模式,对于WEB应用程序开发是一种非常先进的思想.MVC就是model-view-contrller的简写,是把一个应用的输入处理输出流程按照m-v-c的方式进行编程. V-视 图:代表用户交互界面,视图处理尽现与视图上数据的采集和处理,以及用户请求. M-模 型:业务流程/状态处理以及业务规则的制定,模型接受视图请求并返回最终的处理结果. C-控制器:从用户接受请求,将模型和视图配在一起共同完成用户请求. asp.net mvc是微软基于mvc的开发框架,它具有以下特

  • (JavaEE-09)JSP中的MVC与三层架构 2014-07-11

    JSP开发模式 SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式 JSP+JavaBean模式适合开发业务逻辑不太复杂的web应用程序,这种模式下,JavaBean用于封装业务数据,JSP即负责处理用户请求,又显示数据 Servlet+JSP+JavaBean(MVC)模式适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数

  • 小菜编程成长记:第十一章 三层架构,分层开发 2014-03-25

    "大鸟,我们继续讨论吧!"小菜很沮丧的说. "小伙子,不会修收音机也是很正常的,没什么大不了的,用不着丧着一个脸.好象失恋一样,男人再强也要学会说'不'."大鸟安慰着说,"如果你的目标是要成为修理电器专家,那么你连收音机都不会修,那是很郁闷的事.但你现在的目标是什么?" "我想成为软件架构师,编程专家."小菜毫不含糊的说. "就是,你的人生目标很明确,别的方面弱一些有什么关系呢."大鸟继续说道,"

  • 三层架构的问题:代码到底应该放在何处 2012-09-10

    使用Java开发Web应用的时候,不管我们用的是Struts,还是Spring MVC,亦或是自己写的MVC框架,一般都采用三层架构:Controller-->Service-->DAO. 但是,不知道大家有没有注意到一个问题,那就是经常Service层只有一行代码,就是调用DAO,所有的业务逻辑都写在了DAO里,Service完全被架空了.(我们不在这里争论业务是不是简单,是不是都是CRUD,也不争论开发人员的水平问题.总之,存在这种可能,而且有时候也很难区分一段代码里哪些应该写在Servi

  • J2EE开发三层架构的是与非 2012-11-16

    现在开发web大多都是基于MVC的三层架构,三层架构优势什么呢? 三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了"高内聚,低耦合"的思想. 1.表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得. 表现层的主流框架有:struts1 ,struts2,,springMVC,webwork 2.业务逻辑层(BLL):针对具体问题

  • Java Web三层架构的配置详解 2013-11-20

    这篇文章主要介绍了Java Web三层架构的配置方法,需要的朋友可以参考下 一.软件下载: 1.java 这里使用的是jdk1.4.2. 下载地址:http://dlc.sun.com/jdk/j2sdk-1_4_2_07-windows-i586-p.exe; 2.tomcat 5.0.28 这里的tomcat的版本是5.0的,安装版或是解压版都是可以的. 3.数据库 推荐使用mysql,but暂时找不到下载地址,由于此次偶们班有课程设计要用sqlserver的,所以下面实践会使用sqlser

  • ASP 三层架构 Error处理类 2014-02-16

    看到有朋友说前面一章讲得没必要,想想也确实.本来是没有打算讲这些基础的,只是行文起来没有约束,就荡开到基础知识上面了. 从这节开始,将会给大家介绍几个ASP中的三大通用类,它贯穿于我所设计的三层架构中,是对ASP语法的扩展,可以提高很多细节处理上的效率,可以算是一点点框架的味道. 本节介绍错误处理类,类名Con_Error,在代码页面之初就进行初始化,实例名为e,以下的e.add 即使用该错误类的实例化对象进行操作. 方法介绍: e.Add(ByVal vErrorMessage ) 记录一个错

  • AJAX和三层架构实现分页功能具体思路及代码 2014-12-30

    本文涉及到AJAX和三层架构方面的知识,在学习分页的同时也巩固了一下它们的相关知识,适合初学者的你 -----------------------------HTMLPage1.htm--------------------------------- <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <style type="text/cs

  • 基于C#实现的三层架构实例 2015-02-08

    这篇文章主要介绍了基于C#实现的三层架构实例,非常实用,需要的朋友可以参考下 本文所述为基于C#实现的三层架构.对于三层的概念查相信大家并不陌生,这里举一个关于三层的简单实例,真正看一下它是如何具体实现的. 我们先来一起看看实体类-Model 实质:实体类就是在完成数据库与实体类对应的功能,一个类是一张表,一个属性是一个字段! using System; using System.Collections.Generic; using System.Linq; using System.Text;

  • 关于三层架构的一些疑问 2014-04-03

    1.我们在设计网站的时候,经常有前台用于展现的实体和后台用于持久化的实体不完全相同的情况.比如星座这种数据,在后台存的可能是一个tinyint值,但是在前台显示的时候肯定要转成"某某座"这样,对于这种情况,我现在的处理方法是建立PO,VO两种对象,但现在有两个问题:1.VO.PO定义在哪?是分别定义到自己所属的层,不允许穿透?还是统一定义到Model层里面去?2.VO<->PO在哪进行转换?(如果都放到BLL层,会造成BLL层过于臃肿.如果放到对象内部的话,有时候又不得不在

  • 三层架构部署企业级数据库业务系统开发 2009-05-29

    什么是三层构架 随着软件工程的不断进步和规范已经面向对象编程思想的应用,开发人员对封装.复用.扩展.移置等方面的认识和专业化,使得双层架构显然更加臃肿繁琐,三层程序架构体系应运而生.可以说,三层架构体系结构是面向对象思想发展的必然产物.当然三层构架对于目前已经不是什么新鲜事物了,最早产生这个词应该是几年前的Java的运用,j2ee三层构架体系流行了这么多年,一直没有使用过.不过j2ee三层架构体系的提出,对软件系统的架构产生了巨大的影响,微软等公司也针对sun的j2ee三层架构推出了.net平台

  • 三层架构,够不够---DDD眼中的三层(附C#源代码实现) 2012-11-30

    软件复杂度的根本,来源于思维的复杂度. 三层架构 从DDD看三层 DDD的三层实现详细架构 看代码 业务域 (Domain) 持久层 (数据层) 测试和使用的例子 完整代码下载 得心应手武器库: Fluent nHibernate nUnit Git (GitHub) 本文所涉及使用的工具, 见前文: 我的.Net武器库 ------ 新.Net架构必备工具列表 三层架构 相对于目前日新月异的新概念,新名词,三层架构已经算得上元老了.虽仍有争议,但业界更多的是共识. 图1 常用三层的描述图 足够

  • 初学C#编程三层架构的一些问题 2013-10-11

    在学习三层架构时,对于如何运用到项目当中有很多困扰,于是上网找到了传智播客杨中科老师的教学视频,才有了大致的认识.就个人的理解,三层架构是面向对象的,BLL.DAL.UI分别是业务逻辑层.数据访问层.表示层,它们都基于Model(实体类),任何一层都会调用Model,并以经常用Model作为参数传递数据.在一个解决方案中,它们在Visual Studio中的结构如下所示: 一.解决方案1 1.Model 项目(实体类,不属于任何一层) (1)Model1 (2)Model2 -- 2.UI 项目

  • MVC三层架构在各框架中的特征 2014-03-14

    1.基于web开发中最原始的jsp+Servlet 图形化理解jsp+servlet结构: 1.从结构上分析jsp+servlet图解原理: 在基于mvc设计模式下的最原始的jsp+Servlet框架,在某种程度上是不能够达到mvc最直观的体现.当客户端发送请求到服务器时,服务器会将从客户端接收到的信息通过封装技术进行解析,在交给web容器,web容器会通过一篇web.xml的配置文件去找与之相匹配的servlet,此时servlet会开启一个线程,只要是符合web.xml中所配置的某一个ser

  • [Quicky] block 和 inline 答案揭晓~ 另付一则,关于 word-break 2014-04-07

    Hi hi, 大家好~ 过了短短的一天我们又见面了哟~ 在昨天的文章,<[Quicky] block 和 inline 的区别是?>里,我给大家留了个问题--LI 元素到底是block level 的,还是 inline的?现在让我们来揭晓答案吧-- 当当~ 恭喜Duron800同学~ 答对了哟~ 撒花~~ 的确,LI 元素既不是 block level, 也不是 inline 的,因为 BODY 元素不能包含 LI.LI 只能被 OL, UL, DIR 和MENU 这几个元素包含.其中后两个

  • Asp.net 在三层架构中事务的使用实例代码 2014-06-30

    再我知道的.net中,执行事务有两种方法,一种是自动事物,使用起来相当简单,但是需要配置服务器,如果你用的是web共享主机,即没有权限配置自己的服务器,那就没必要用这种了,接下了我讲下.net中最普通的事务SqlTransaction 接触3层也有一段时间了,了解水平一般,前段时间在想在三层中怎么使用事务呢,放在哪呢?Sqlherper ? DAL? BLL?.然后我就疯狂的百度,好几次都是未果(因为做的都是小项目,不用事务也关系不大),今天我再次查时,好好的看了csdn上的以讨论,http:/