转自:http://www.cnblogs.com/wisdomqq/archive/2009/04/29/1446579.html
在CSDN和园子里有朋友谈到三层与MVC的区别,以前也有人抛出这个问题,本人对来公司面试的朋友也偶乐会提这方面的问题。
那么我也来讲讲我对这两者的理解吧。
首先对这个题目,本身是存在问题的,“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则是游戏卡带,他绝定了我玩的是什么游戏,是魂斗罗还是超级玛莉,而且游戏机主机和电视机生产厂家永远也不知道在上面有可能会运行什么样的游戏。卡带中可能会有游戏代码和存储单元,都根据游戏的需要而设计。
===================4/30补充==================
有朋友提到游戏主机提供的卡带插槽的接口,在设计中,有时也由Control提供一组接口,以用于Model或View的实现,这样就形成了依赖。一般来说这样设计也没有太大的问题,只是会提高模块间的耦合度,也会带来一些侵入性。为了更完美,可以不用接口来提供契约,可以用配置信息(或称元数据信息)+反射来提供契约,那么这个类接口就可以退化到只要符合CLS就可以了,也就是普通的类,就像现在的计算机接口广泛采用USB,无论是U盘、打印机、扫描仪或者是加密狗,他们都是普通的USB设备而已。
提到USB有一个题外话,模块的可插拔性设计甚至是热插拔设计,系统可以在不停止运行的情况下动态的挂载或移除模块,动态挂载模块需要系统能够自动发现新模块并根据自描述的信息进行自动配置,移除可能情况更复杂一点,需要“安全删除硬件”类似的功能。
在设计广泛重用的框架时会考虑多种情况以达到更大的适应性,一般项目中应用MVC模式可以较为随意。
分享到:
相关推荐
三层架构和MVC模式区别
清楚透彻地为你解答什么是mvc模式。三层架构,区别MVC与三层架构区别。 更好地运用MVC
UML图设计模式、三层架构、MVC.EAP
本程序一个基于三层架构的MVC模式应用的完整示例项目源码,基于Asp.net 3.5开发...1) 基于标准的三层结构。 2) 表示层采用MVC模式。 3) 数据的增、删、改、查操作。 4) 列表数据显示及分页处理。 5) Linq的应用等。
CodematicDemoMVC示例源码 CodematicDemoMVC 是一个基于三层架构的MVC模式应用... 1) 基于标准的三层结构。 2) 表示层采用MVC模式。 3) 数据的增、删、改、查操作。 4) 列表数据显示及分页处理。 5) Linq的应用等。
典型的MVC三层架构编写,代码层次清晰,是学习三层架构以及工厂模式,反射的轻量级DEMO学习实例。 主要功能包含: 1、财务项目管理、家庭成员管理、收支明细管理、登陆用户管理、修改用户密码、 切换登陆账户。 2、...
一个MVC开发模式和三层架构相结合的asp.net bbs实例,数据库是sql。
MVC三层架构+DAO工厂模式进行JAVA WEB开发
开源的Mvc三层架构,适合初级 中级开发人员研究学习
基于C#,MVC设计模式,三层架构,课设作业.zip基于C#,MVC设计模式,三层架构,课设作业.zip基于C#,MVC设计模式,三层架构,课设作业.zip基于C#,MVC设计模式,三层架构,课设作业.zip基于C#,MVC设计模式,三层...
三层+MVC模式开发的asp.net项目,对user表进行增删改查,user表为ID,Name,Title简单三列,方便新手学习和实践
MVC 三层模式 有数据库 包括增删改查 数据库是sqlserver2005
对java中MVC的理解,这个ppt或许会你带来部分疑惑解答
java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源
这是一个基于 MVC+三层架构模式购物车案例的例子,供大家下载。
里面是一个简单的购物车系统,是在实训的基础上直接修改,以前是卖书,现在是卖花,很多代码都是以前的,没有进行修改,上传这个的原因是我...、JSP内置对象、JavaBean技术、Servlet技术、JSP数据库开发、MVC三层模式
三层架构 增删改查,只是简单的例子,列表显示,控制器,试图,类
本系统采用ASP.NET技术实现新闻管理系统,对数据库的怎、删、改、查
不久之后,我写了一篇题目为《浅谈“三层结构”原理与用意》的文章。旧版文章以彬月论坛程序中的部分代码举例,通过全局视角阐述了什么是“三层结构”的开发模式?为什么要这样做?怎样做?……而在这篇文章的新作中...