欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » Html » 正文

热门阅读

三层架构与MVC的区别经典讨论收集

创建时间:2011年10月26日 13:41  阅读次数:(7605)
分享到:
楼主:
既然MVC是一种设计模式,那么他就应该在任何地方都可以使用。比如三层。
有人说MVC里的V相当于三层里的UI,M相当于三层里的DAL + BLL。这么理解也不错,因为设计模式可以应用在任何地方,这么理解是完全可以的。但是我有另一种理解,大家看看对不对。
我觉得在UI层里面也可以使用MVC设计模式。请注意仅仅只在UI层里。还是用一个实例来说明吧,我不擅长讲原理。
假设我们要显示博客园的首页,再缩小一下范围,我们要实现首页的里博文列表。美工做出来的html是这样的(代码一),那么这个是不是V呢?
下一步,我们要把数据库里的数据填充上。我们再来定义一个json(代码二),那么这个是不是M?准确的说是M的一部分。
然后我们要把html和数据合在一起,我们可以写一段js(代码三)来实现。那么这段js是什么呢?这个我也有一些犹豫,不知道是属于M还是应该属于C。暂且先放在这里。
这些东西如何配合工作呢?我们再写一段js(代码四)。
这个可以说是C,没有什么问题吧。页面加载后触发,加载V,加载M,调用代码三,把html和数据合在一起。
那么我上面说的这些是不是应用了MVC设计模式呢?这个我还真不敢确定。如果你说,这些都是三层里的UI,那么我同意。不过如果你说这些都是MVC里的V,那么我就不同意了。呵呵。
刚刚学习jQuery,js的底子也比较烂,所以代码比较惨不忍赌了,希望能够把我的意思表达出来,大家多多包涵。

回贴一:
mvc和三层架构不是一个概念,一个是设计模式,一个逻辑架构

回贴二:
Model-view-Controller应该算是三成架构中的表现层的一种方式,两个没什么可比性!

回贴三:
你说的mvc不太了解,只了解微软的asp.net mvc和三层。
看了你的文章而得出的理解:
你说的mvc设计模式 应该是用设计三层中的UI,而ui 又包含ui展示,ui逻辑,ui数据等等,
而微软的asp.net mvc也恰好用来设计UI的,这不是偶合,应该正是使用了传说中的mvc设计模式。

回贴四:
MVC是一种思想
楼主所说UI层里面也可以使用MVC设计模式,其实更像一种“MDC”呢?model——Data——View,记得尚学堂的视频上在将Ajax的就是这么说的。
不管什么类型的MVC,都是为了显示和数据的分离,具体的逻辑处理交由控制器去处理,达到低耦合的目的。

回贴五:
asp.net mvc 不太熟,只是感觉他在默认情况下是在服务器端生成html,不是很爽。当然也理解这种做法,就是要兼容搜索引擎。

回贴六:
MVC关注与视图层请求交由控制器去处理,控制器调用model做持久化处理,类似于楼主所表达的思想,更关注于视图层的数据来源问题

回贴七:
MVC是一种思想,其实你的Model,VIEW,Control可以单独分为很多层
而3层就是3层
我上面说的依赖关系,是我们最好这样事件,和理想的标准,
实际上要遵循标准是自己的编码习惯

回贴八:
UI层本身也需要模型和控制器。从这个角度看,Web Forms其实也是MVC模式。aspx中的标记是V,codebehind是M,asp.net是C。
MVC的M具体来说,也可以分为充血的M、贫血的M和失血的M。也就是说,有时候甚至可以把BLL放入Controller。
以上的讨论不涉及这么做的场合和特定场合的合理性,只是说,MVC的形式多种多样,要从思想方法的角度来看这个问题。
p.s. 大家知道 MFC 框架的 Document-View,其实它也是一个 MVC 框架。很多人区分 MVC MVP,其实 MVP 也是 MVC 的变种。

回贴九:
《深入浅出设计模式》里面有说明,MVC是一种复合设计模式,就是说他不是单一的设计模式,是多种设计模式综合在一起。
V、C没有什么依赖不依赖的,C调用V。我的理解是C是一个组装人员,把M、V组装在一起。

回贴十:
如果你知道啥是分层那就绝对不会去谈啥 petshop
如果你知道啥mvc那就绝对不会去谈啥分层和mvc的看法
了解他们是啥的从来就不会把他们放在一块非要划个1,2,3,4出来
我们也从来不会说,我分层了就不能再每一层里面使用mvc (又或者倒过来说,我mvc了,我不能在我的项目去分层)
实际说白了,那就是根本没啥可比滴
不能说我穿了一双nike的鞋子,你不让我穿阿迪达斯的衣服,不能戴李宁的帽子
只要你觉着高兴,穿着漂亮,你想怎么穿都成
难道我们还非要比较一下,李宁,nike的区别不成

回贴十一:
设计模式不只有23种, MVC与GoF里的设计模式有很大的区别。

MVC是表现模式,三层实现了分层架构。如果非要拿MVC当一种架构来使用,也不是不可以的,因为MVC从某种角度来看也可以说是一种分层,MVC不是三层架构,虽然MVC不存在层次结构的化分,也可以当做三层架构来使用,但是那样做不好!MVC更偏向于横向的抽象(同一层次)的组件(业务数据和显示)分离,核心在于Controller,没有C,M和V只是木头。也不能说任何时候都是木头,时间也是M和V的主动对象。

UI层,更多关注如何展示,它是主动的,会存在逻辑控制,会私自处理自己的业务逻辑、数据。也会调用BL的主要业务逻辑。
BL层,实现了主要业务逻辑,相对于DL、UI,它是被动的也是主动的。
DL层访问数据的,它是被动的,三层中每一层中如果需要, 都会有设计模式来解耦。
三层划分中不包括数据库,三层把逻辑模型划分了,包括如何访问数据,数据库不算一层,它是服务。如果想把数据库当做一层的话,也可以,那么它只能归在DL层中,不可以单独做一层,因为它本质上就是单独的。

Controller只做控制,相对于M和V,Controller是主动的组件。
Model会封装业务和数据, Model中没有BL和DL的逻辑控制,只有业务和数据,Model通常是被动的。
View中没有UI层中的逻辑控制, 只有展示, View可以呈现Model的状态, Model只是个橡皮泥,我们可以通过View观看到Controller玩怎么玩它。相对于三层架构,MVC解耦更加抽象。

MVC相对于三层架构有更多的设计理念。
MVC不可与三层架构做比较,如果非要做比较,M相当于三层架构中的BL层,但BL不封装数据,而且M还没有BL中的业务逻辑控制,只封装了业务,还封装了领域模型。所以把M强转一下,可以大至转成三层中的中间层(BL)。但M是被动的, BL是既是主动又是被动的。
V可以强转成三层中的UI层,但UI里,有逻辑控制,V里没有。
C可以也可强转成UI里的逻辑控制。
所以把MVC放到三层中,占据中上层的位置(UI和BL)。
三层架构与MVC不存在一起使用的概念。

回贴十二:
如果抽象一下:
Object dataAccess = Accnew DataAccess();
Object business = new Business();
Object logic = new Logic();
Object presentation = new Presentation();
Object entity = new Entity();

M 和 DL 都继承自 dataAccess组件,M又在物理上的聚合了业务实体对象,DL间接聚合了实体对象。
M 封装了 business组件,BL也封装了 business组件。
BL 包含了 logic, M中没有包含。MVC中的C 包含了 logic.
UI继承了 presentation 和 logic。
View 只 继承了 presentation。

以上内容收集自CSDN,本人觉的该贴中很多的回复对于初学者来说还是相当有意义的,故整理至此,希望对大家对三层与MVC的区别有更深一层的了解。1\購zfFU nf惡N
来源:
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 7+12=? 的结果(结果是:19)
结  果: