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

http://www.cnblogs.com/zhhh/archive/2011/06/10/2077519.htmlhtml

又看到有人在问三层架构和MVC的关系,感受这种问题有点教条化了。由于它们都在逻辑上将应用程序划为三块,凑了一个数字3,就有人非要把它们联系到一块儿了。java

  这两个东西我接触有几年了,有一点体会,表达一下:程序员

  三层是三层,MVC是MVC,它们毫无关系的。web

三层是从整个应用程序架构的角度来分的三层(若是程序须要,还能够分多层)。面试

  三层是为了解决整个应用程序中各个业务操做过程当中不一样阶段的代码封装的问题,为了使程序员更加专一的处理某阶段的业务逻辑。算法

  好比将数据库操做代码封装到一层中,提供一些方法根据参数直接返回用户须要的相应数据,这样在处理具体的业务逻辑的时候,就不用关心数据的存储问题了。数据库

MVC是在应用程序(BS结构)的视图层划分出来的不一样功能的几个模块。编程

  MVC主要是为了解决应用程序用户界面的样式替换问题,把展现数据的 HTML 页面尽量的和业务代码分离。MVC把纯净的界面展现逻辑(用户界面)独立到一些文件中(Views),把一些和用户交互的程序逻辑(Controller)单独放在一些文件中,在 Views 和 Controller 中传递数据使用一些专门封装数据的实体对象,这些对象,统称为Models。设计模式

  只因此说MVC和三层毫无关系,是由于它们两者使用范围不一样:三层能够应用于任何语言、任何技术的应用程序;而MVC只是为了解决BS应用程序视图层各部分的耦合关系。它们互不冲突,能够同时存在,也可根据状况使用其中一种。安全

 

 

 

http://blog.csdn.net/beijiguangyong/article/details/7029257

三层架构就是MVC!

起初老师总说三层MVC,MVC三层架构……

因此开始的时候脑子就一个概念:三层就是MVC,MVC就是三层架构。并且想一想也合理啊,都是“三”。MVC是三个字母,三层架构也是“三”,理所应当的就对应上了。而后就这么一直“错”了很长时间。

三层架构毫不是MVC!!

后来学习了J2EE以后发现老师说的好像不对,MVC和三层架构不是一个东西。三层架构是界面层(UI)业务逻辑层(BLL)和数据访问层(DAL)构成的,而MVC是模型层(M)界面层(View)和控制层(Controller)构成的,并且他们之间也不对应。

若是硬要给他们对应的话,那么三层架构中的UI对应MVC中的view(jsp),都是用于显示以及获取界面的数据;三层架构中的BLL层和DAL层对应MVC中的Model(javabean)层都是用于处理上层传递来的数据以及从数据库获取的数据的;MVC中的Controller(Servlet)最多算是三层架构中的UI的一部分,也就咱们常说的是Servlet。

以下图所示:

顿时感到世界明朗了,对分层又深刻了解了一步。

其实三层架构和MVC仍是一个东西!!!

这几天一直在思考三层架构和MVC究竟是个什么关系,老师为何起初会放在一块儿说嘞?而后恍然大悟:其实三层架构和MVC是同样的!!!咱们所看到的不同只是表面上的不同。核心的东西是一致的,那么什么是核心?

答曰:分层,解耦!

若是从解耦的角度来看三层架构和MVC其实他们是一致的,只不过划分的方法不同罢了,就像上面的图所示。从这一点说他们能够说是一个东西。这就至关于咱们看到馒头和面条同样,表面上看他们不同(注意仅仅是表面)可是他们核心是一致的,都是面……

知识的学习过程就要像老牛反刍同样,须要不断的加深认识,最终才能真正领悟

对事物的认识是从感性到理性的,是一步一步的加深的,每一步的加深也许会推翻之前的本身,也许会更加赞同之前的本身。若是是推翻之前的本身那么表明对这个事物的认识发生了翻天地覆的变化,可是若是赞许之前的本身也并不表明本身的观点没有变化,每每表面上看起来一致的东西其实内核并必定是相同的。就像刚开始的时候认为三层架构和MVC是一个东西到最后一样是认为这两是一个东西,可是理解的层次绝对是不同的。

至于之后会不会再次推翻本身的观点我不晓得,只能说每次推翻都表明着进步,表明着理解的更深一层,因此我指望着下次的否认本身

 

 

http://baike.baidu.com/view/687468.htm

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

 

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

 

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

 

 

http://topic.csdn.net/u/20090710/14/07f4447d-60c4-4b74-af1c-ea1b6e2e9ca7.html

固然啊,你要明白三层架构的MVC的区别和联系:
三层架构是最基本的项目分层结果,而MVC则是三层架构的一个变体,MVC是一种好的开发模式。首先你要明白MVC分别表明的是什么意思. M 即Model(模型层),主要负责出来业务逻辑以及数据库的交互 V 即View(视图层),主要用于显示数据和提交数据 C 即Controller(控制器),主要是用做捕获请求并控制请求转发
三层:UI 界面层 BLL 业务逻辑层,DAL数据访问层,Model 实体层 MVC中的的M 不是三层中的Model(实体层),他其实包括三层中的 BLL,DAL,Model,这是很是要注意的,这也是他们之间的区别的关键所在
其有点有以下: 低耦合性 高重用性和可适用性 较低的生命周期成本 快速的部署 可维护性 有利于软件工程化管理
固然优势也有缺点,那就是内部结构复杂,不容易理解,文件数量大,管理难度天然也就大

 

 

MVC设计模式… 三层架构… 他们细分以后获得的是:View(UI)、BIZ(BLL)、DAO(DAL)、Entity(Model)、Controller MVC把 BIZ(BLL)、DAO(DAL)、Model(Entity) 统一称之为 模型(MODEL),获得:View、Controller、模型(MODEL) 三层 在我使用中 暂未体会到控制器的存在,彻底是:UI、DAO、BLL
他们相同的设计理念就是:把视图设计与数据持久化进行分离,从而下降耦合性,易于扩展,提升团队开发效率。

 

三层是基于业务逻辑来分的,而mvc是基于页面来分的 根本就没有什么可比性。 其实两个一块儿用我感受很好

 

MVC模式是一种复合设计模式,一种解决方案 三层是种软件架构,经过接口实现编程 三层模式是体系结构模式,MVC是设计模式 三层模式又可归于部署模式,MVC可归于表示模式

 

引用楼主 daijun17 的回复: 如何在三层架构和mvc之间进行取舍呢?

没有什么取舍的,说的根本不是一回事。在所谓的“三层”中,它要求你将BLL层独立出来,它只是告诉你表示层和业务逻辑层之间的静态关系。而MVC则告诉你在这个具体的地方如何处理其动态驱动流程,尽管mvc仍然粗糙(甚至mvp也是粗糙的),可是已经比所谓三层更细致一些了。

 

谢谢你们的关注,这几天都在忙面试,没来结贴。再次谢谢你们。 我大概明白了:三层架构和mvc设计模式侧重点不同,三层是一种笼统的架构思想,没有限制具体的设计;而mvc就比较具体的说明它的设计方法。 仍是本身动手作一下,理解会更深一些,之前都是用三层架构的方法

 

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

http://apps.hi.baidu.com/share/detail/15057889

ASP.NET MVC 与 WebForm 三层架构 区别

1.传统WebForm开发中存在的一些问题

传统的ASP.NET开发中,微软的开发团队为开发者设计了一个在可视化设计器中拖放控件,编写代码响应事件的快速开发环境。然而,它所带来的负面效应是:

因为控件封装了不少东西,开发者很难了解这背后的HTML是如何运做的

容易获得一个包含大量ViewState的页面,使得页面尺寸远远超过所需的内容,使得页面的打开速度较慢

不容易被测试

2.什么是MVC?

MVC(Model-View-Controller,模型-视图-控制器模式)是软件工程中的一种软件架构模式。它把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。

3.什么是ASP.NET MVC?

ASP.NET MVC是微软的开发团队基于MVC开发的一个易于被测试的框架。它具备如下特性:

没有数据回传

没有在页面中保存视图状态

开发者能够彻底掌控页面的呈现过程

易于单元测试

易于测试驱动开发

可扩展、可替换

支持WebForm中的有关特性,如:用户控件、母版页、数据绑定、本地化等

不在基于文件目录结构,而是将URL映射到控制器中

4. 为何使用ASP.NET MVC?

易于进行单元测试

易于进行测试驱动开发

避免了WebForm中大量的ViewState致使页面文件变得臃肿

5. MVC与三层架构?

MVC是一种模式 ASP.NET MVC是一个基于MVC模式的开发框架 三层架构是一种架构

至于区别,能够严格的从概念上区分开来。

下图是MVC与三层架构的对应关系

6. MVC与Webform如何抉择?

7. 两种技术并存

ASP.NET MVC框架只是给开发者提供欧诺个了开发web应用程序的一种选择,并非要取代Webform

这两种技术各有优缺点,开发者须要根据实际状况,选择对应的技术

有时候,能够在同一个项目中混合使用这两种技术

8.ASP.NET MVC与Webform技术的架构图

总结:

看完本文,相信ASP.NET WebForm与ASP.NET MVC的选择相信你们应该能够作到心中有数了,我始终以为,不少时候并非什么技术好很差的问题,而是适合不适合不适合的问题或者可否把它用好的问题。

打个比方:若是让千里马犁地,恐怕未必能达到理想的效果,最终可能还会抱怨,什么破马,一点劲都没有。

 

 

 

========================================================================

 

http://www.blogjava.net/phyeas/archive/2008/07/01/211995.html

一样是架构级别的,它们有什么相同点和不一样点呢?这篇文章讨论一下它们的异同点。但愿能帮助读者理解其中的玄机。 :)

其实它们相同的地方在于他们都有一个表现层。

可是他们不一样的地方在于其余的两个层。

首先先解释一下MVC。V即View.是视图的意思。C即Controler.是控制器的意思。而M即Model,是模型的意思。这三个里.最不容易理解的应该是Model.就是什么是Model,而为何叫Model。我先不说为何叫Model,先解释Controler。

Controller是控制器的意思,所谓控制器,就是将用户请求转发给模型层,通过处理后把结果返回到界面展示的一个中间层,那么Controler到底管什么工做呢?先不说.先来看下在Java Web中这三个层通常的定义,通常在Java Web里,JSP充当V,Servlet充当C,JavaBean充当M,这里的Servlet管什么工做呢?接受输入,转到Model层去处理,处理结果保存后转发到JSP,而后展示数据。因此它的功能就是控制器的基本功能,它就管转发,在V和M之间转来转去。

再来讲说M,即Model,在Java Web里说的是JavaBean,我认识的不少人都把JavaBean误认为是实体类,其实JavaBean有比实体类更丰富的定义,在JavaBean中除了其属性和字段,还能够有行为及其事件,JavaBean能够理解为普通Java对象。Java普通对象,就是符合Java规范的全部对象,这和实体类彻底是两回事。因此,我认为在MVC中。业务逻辑和数据访问应该放在Model层,也就是V负责展现数据,Controler除了转发不作业务逻辑。真正的逻辑事务,数据访问,甚至算法都放到Model去。

再说三层架构。三层其实很好理解,界面,业务,数据访问,就这三个,从字面均可以理解出它们的意思。我要说的是它和MVC的区别。在三层架构中没有定义Controler的概念。这是我认为最不一样的地方。而MVC也没有把业务的逻辑访问当作两个层,这是采用三层架构或MVC搭建程序最主要的区别。

固然了。在三层中也提到了Model,可是三层架构中Model的概念与MVC中Model的概念是不同的,“三层”中典型的Model层是已实体类构成的,而MVC里,则是由业务逻辑与访问数据组成的。不同的概念。虽然名字同样。

 

 

 

 

http://blog.sina.com.cn/s/blog_677b66170100mv16.html

asp.net mvc和三层架构联系与区别

首先,MVC和三层架构,是不同的。   三层架构中,DAL(数据访问层)、BLL(业务逻辑层)、WEB层各司其职,意在职责分离。   MVC是 Model-View-Controller,严格说这三个加起来之后才是三层架构中的WEB层,也就是说,MVC把三层架构中的WEB层再度进行了分化,分红了控制器、视图、实体三个部分,控制器完成页面逻辑,经过实体来与界面层完成通话;而C层直接与三层中的BLL进行对话。   因此, .net的三层结构中,并无action这个概念。   asp.net mvc 是微软新发布的一种网站开发架构。为了解决传统asp.net开发中不能分离Model,View和Controller而设计的。   普通的网站为了解决可移植,可维护,可扩展等问题,会把网站设计成三个独立的模块,Model负责数据库部分,View负责网页的界面,而Controller负责界面与数据的交互及业务逻辑,这样设计的网站若是想设计或者从新开发某一个模块对其余的模块是没有影响的。可是asp.net的页面后台代码与每一个页面代码都是一一对应的,业务逻辑在某些状况下不可避免的被写到了与View关联的后台代码中。这样就不能保证View与Controller的分离,也就很难实现网站的重写和升级。   而在MVC中页面代码并非与后台代码一一对应,而是分别被存放成Controller和View两个部分,完全的解决了,View和Controller不能独立的问题。从而改善网站的重写和升级过程。   可是MVC也有其缺点,因为在页面代码中再也不可使用服务器控件,所以给某些asp.net服务器端控件的使用带来了麻烦,并且MVC也页面的设计工做带来了不少障碍。   ASP.NET MVC 是微软在2009年4月份发布的一种新的网站开发架构,http://msdn.microsoft.com/en-us/library/dd394709.a spx,它是把传统意义上的MVC开发思想融合到了ASP.NET的开发当中。   那么我也来说讲我对这二者的理解吧。   首先对这个题目,自己是存在问题的,"XX结构"与"XX模式"的区别?请问中国社会制度与美国人生活方式有什么区别?   这二者自己讲的是不一样方向与角度的问题,在实际应用中他们的确存在一些类似的特色,在不少书籍中也没有深刻讲解,以至于形成困惑,为了更好的理解他们,姑且来讲说区别吧。   首先N层结构是一种软件抽象的层次结构,是对复杂软件的一种纵向切分,每一层次中完成同一类型的操做,以便将各类代码以其完成的使命做为依据来分割,以将低软件的复杂度,提升其可维护性。通常来讲,层次之间是向下依赖的,下层代码未肯定其接口(契约)前,上层代码是没法开发的,下层代码接口(契约)的变化将使上层的代码一块儿变化。三层结构是N层结构的一种,是人产在长时间使用中得出来的一种应用场合普遍的N层结构,被看成一种典型的软件层次结构而广为流传甚至写入教科书。   MVC模式是一种复合设计模式,一种在特定场合用于解决某种实际问题来得出的能够反复实践的解决方案。巧合的是他也有三个事物组成,因而乎人们就有了一种想固然的对应关系:展现层-View;业务逻辑层-Control;持久层-Model。首先MVC中的三个事物之间并不存在明显的层次结构,没有明显的向下依赖关系,相反的,View和Model每每是比较独立的,而Control是链接二者的桥梁,他们更像是横向的切分。这样一来就出现一个结果,MVC中每一个块都是能够独立测试的,而三层结构中,上层模块的运行测试势必要提供下层代码或者提供相同接口的桩。相对来讲,MVC复杂得多,可是结构更清晰,耦合性更低。   另外,MVC中每一块内部特别是Model内部常常被设计为多层的。在我认为的一个良好的MVC模式构建的结构中,Control是核心,小且较为稳定的,能够做为一个核心框架来提供,有扩展点,但基本上能够简单配置不须要任何代码就能够运行。而View则多是一套或多种可选择的视图引擎,决定了软件展现给用于的界面,使用时的主要工做量在于扩展点以及根据须要而数量不一样的视图模板。Model则是业务提供者,决定了软件提供的功能,其内部多是一些普通的类或者是实现了某些接口的类,在这一块当中可能根据业务的不一样而色彩缤纷,对于复杂的软件可能会分红不少层,如业务逻辑层、业务提供层、系统提供层、数据提供层、数据访问层等。   我常常用于比喻MVC的例子是小时候玩的那种卡带式游戏机,Control是主机,通常来讲我买一个主机就好了,只要他不坏,他就能一直让我玩这一类的游戏。View则是电视机和游戏手柄,电视机能够独立工做,他无论输入的是电视信号、影碟机信号仍是游戏机信号,他只管显示,并且他决定了咱们看到的效果是怎么样的,若是我想要个尺寸更大的或者彩色的显示效果,我只须要买个相应的电视机就好了,手柄也是能够换的,要遥杆仍是带震动的。Model则是游戏卡带,他绝定了我玩的是什么游戏,是魂斗罗仍是超级玛莉,并且游戏机主机和电视机生产厂家永远也不知道在上面有可能会运行什么样的游戏。卡带中可能会有游戏代码和存储单元,都根据游戏的须要而设计。   有朋友提到游戏主机提供的卡带插槽的接口,在设计中,有时也由Control提供一组接口,以用于Model或View的实现,这样就造成了依赖。通常来讲这样设计也没有太大的问题,只是会提升模块间的耦合度,也会带来一些侵入性。为了更完美,能够不用接口来提供契约,能够用配置信息(或称元数据信息)+反射来提供契约,那么这个类接口就能够退化到只要符合CLS就能够了,也就是普通的类,就像如今的计算机接口普遍采用USB,不管是U盘、打印机、扫描仪或者是加密狗,他们都是普通的USB设备而已。   提到USB有一个题外话,模块的可插拔性设计甚至是热插拔设计,系统能够在不中止运行的状况下动态的挂载或移除模块,动态挂载模块须要系统可以自动发现新模块并根据自描述的信息进行自动配置,移除可能状况更复杂一点,须要"安全删除硬件"相似的功能。   在设计普遍重用的框架时会考虑多种状况以达到更大的适应性,通常项目中应用MVC模式能够较为随意。

相关文章
相关标签/搜索