菜鸟学飞基地
偶会勤勤恳恳灌溉这里滴一亩三分田
三层架构与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://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模式可以较为随意。
分类: .NET基础, 他山之石 绿色通道: 好文要顶 关注我 收藏该文 与我联系
小奈鲁
关注 - 6
粉丝 - 26 +加关注 0 0 (请您对文章做出评价) « 上一篇: 【转】MVC设计模式
» 下一篇: 斐波那契数列非递归算法(fibonacci)
posted on 2011-04-12 08:31 小奈鲁 阅读(6242) 评论(2) 编辑 收藏
评论
#1楼 2012-07-04 00:19 银色小猫
感谢楼主的分析,看了明白了一点点。 支持(0) 反对(0)
#2楼26474822013/4/1 16:58:20 2013-04-01 16:58 sharp.M
比较全面 支持(0) 反对(0)
刷新评论 刷新页面 返回顶部 注册用户登录后才能发表评论,请 登录 或 注册, 访问网站首页。 找优秀程序员,就在博客园
博客园首页 博问 新闻 闪存 程序员招聘 知识库 最新IT新闻:
· 索尼终止1366x768笔记本生产
· MIT机器人为你组装宜家家具
· 日本超强手机降噪技术 可屏蔽99%风声
· 小米要开实体店 你猜是北京还是深圳?
· Pinterest明星软件工程师麦克斯威尔加盟雅虎
» 更多新闻... 最新知识库文章:
· 进程与线程的一个简单解释
· 那些触动人心的产品细节
· 如何组织大型JavaScript应用中的代码?
· 想爬得更高,需要知道的数学体系
· 谈谈对BPM的理解
» 更多知识库文章...
导航
- 博客园
- 首页
- 新随笔
- 联系
- 订阅
- 管理
统计
- 随笔 - 265
- 文章 - 0
- 评论 - 38
- 引用 - 0
公告
昵称: 小奈鲁
园龄: 3年2个月
粉丝: 26
关注: 6 +加关注
搜索
常用链接
- 我的随笔
- 我的评论
- 我的参与
- 最新评论
- 我的标签
最新随笔
- 1. 【转】C#后台调用前台页面js方法
- 2. 【ZT】Oracle CASE WHEN 用法介绍
- 3. sql中exists,not exists的用法
- 4. sql server的随机函数newID()和RAND()
- 5. 提高数据库效率的一些方法--eg:大批量循环插入数据的简化
- 6. 2013.1.28 - dt是System.DataTable和Excel.DataTable 之间的不明确的引用
- 7. jQuery获取Select选择的Text和 Value
- 8. oracle视图总结(转)
- 9. [转]System.ArgumentException: 回发或回调参数无效。在配置中使用 < pages enableEventValidation="true"/> 或在页面中使用 <% @ Page EnableEventValidation="true" %> 启用了事件验证
- 10. 【ZT】asp.net表单验证控件使用收集
我的标签
- GridView(1)
- RadGrid ItemIndex Cells 单元格(1)
- tooltip(1)
- web.config(1)
随笔分类
- .NET基础(152)
- ASP相关(19)
- Crystal Reort(5)
- CSS(3)
- GridView(22)
- HTML(5)
- IIS(7)
- jQuery/AJAX(14)
- JS(19)
- Oracle(23)
- Remedy(2)
- SqlServer(41)
- VB(10)
- web.config(10)
- 菜鸟心情(6)
- 数据库(16)
- 他山之石(75)
- 学飞轨迹(141)
随笔档案
- 2013年5月 (1)
- 2013年3月 (1)
- 2013年2月 (3)
- 2013年1月 (4)
- 2012年12月 (1)
- 2012年11月 (2)
- 2012年10月 (1)
- 2012年9月 (3)
- 2012年7月 (3)
- 2012年6月 (6)
- 2012年5月 (5)
- 2012年3月 (3)
- 2012年2月 (1)
- 2012年1月 (1)
- 2011年12月 (3)
- 2011年10月 (2)
- 2011年9月 (7)
- 2011年8月 (6)
- 2011年7月 (6)
- 2011年4月 (12)
- 2011年3月 (20)
- 2011年2月 (13)
- 2011年1月 (20)
- 2010年12月 (9)
- 2010年11月 (14)
- 2010年10月 (13)
- 2010年9月 (16)
- 2010年8月 (18)
- 2010年7月 (12)
- 2010年6月 (28)
- 2010年5月 (15)
- 2010年3月 (11)
- 2010年2月 (6)
技术参考手册
- ADO手册
- ASP手册
- CSS手册
- HTML手册
- JScript手册
- SQL手册
- VbScript手册
- 网页特效
学习前辈好榜样
- ASP.NET 魔法學院 (rss)
- 著有《ASP.NET專題實務》的一个有意思的台湾作者
- ASP.NET 魔法學院(繁体)
最新评论
- 1. Re:三层架构与MVC的区别
- 比较全面
- --sharp.M
- 2. Re:The file or Assembly &quot;BMC.arnettoc.dll&quot; or a dependency could not be found.
- 兄台在哪里高就?也是做remedy的吗?我自己封装了一个remedy .net api,BMC论坛上那个太臃肿了。
- --P_Chou
- 3. Re:JS中URL编码参数(UrlEncode)
- 收藏;
- --tinyphp
- 4. Re:It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level
- 请问楼主解决没有。怎么解决 的,求回复。
- --Arvin_
- 5. Re:【ZT】利用反射排序泛型List
- 关于反射排序那块 sort排序,会不断的调用Compare方法,一直反射是不是效率会受一些影响啊,如果能反射一次就好了!
- --No89757
阅读排行榜
- 1. JS中URL编码参数(UrlEncode)(44601)
- 2. (转)GridView固定表头(8297)
- 3. 【转】Delete,Update与left join(6717)
- 4. Oracle时间戳(6712)
- 5. oracle 类型转换函数(6377)
评论排行榜
- 1. (转)GridView固定表头(7)
- 2. 20100525 学习记录:关于发布网站嵌套的bin文件夹 和 Could not create type....报错 = =+(4)
- 3. JS中URL编码参数(UrlEncode)(4)
- 4. 重生(2)
- 5. 三层架构与MVC的区别(2)
推荐排行榜
- 1. JS中URL编码参数(UrlEncode)(3)
- 2. 【转】httpHandlers和httpModules深度剖析(2)
- 3. 【转】HTTP协议及其POST与GET操作差异 & C#中如何使用POST、GET等(2)
- 4. GridView 事件和用法(2)
- 5. 【转】Delete,Update与left join(2)
Powered by:
博客园
Copyright © 小奈鲁