前言
在重构机房收费系统后,对于三层架构、设计模式的认识一直在继续。每当看到一点东西时,总是会去和过去对比,看看自己是否哪里的理解有问题。
最近在看Head First的设计模式。最初接触设计模式,看的是大话设计模式,印象中这是我第一次完整的看完除数学、物理、化学之外的第一本书。最初我认为是大话设计模式这本书深深的吸引着我,可是当我看完Head First设计模式后,我计划用两天看完,事实上如果没有打断,两天看完是毫无压力的。
看完这本书后,我发现系因为的并不是大话设计模式,也不是Head First,而是设计模式。前人留下的宝贵的经验是那么容易让人着迷。对于这此看Head First设计模式的总结将会慢慢呈现。这篇想说一下MVC分层与三层架构的关系。
问题阐述
在学习分层之初,米老师说自己找资料学习一下MVC三层架构。于是就自己去查MVC了,查了一些资料看了之后,又看师兄博客,发现自己找的有点出入。他们看的都是三层架构。然后就开始看三层架构的资料,最后把系统重构了。
当初对MVC有一种畏惧心理,所以一直也没敢亵玩。只是偶尔听到谁说一句,MVC和三层不是一回事、MVC和三层其实目的是一样的等等这样或那样的话,还有人说MVC不是架构,它就是几个设计模式复合使用,还有人说。。。。
对于别人的意见,我已不想再评论什么,大家自己学习一下,相信你也会有自己的见解。
概念叙述
三层架构(这里只说经典三层),传统意义上就是UI、BLL、DAL三层。将代码断开,然后放到各自归属的地方去(当然会多出来一些代码)。以达到界面、业务逻辑、数据的解耦。
MVC,是模型、视图、控制器。视图只负责显示、控制器操纵模型,模型包含了所有的状态、数据和应用逻辑。MVC是一种复合模式,包含观察者、策略、组合。视图是模型的观察者,当模型一发生改变时,视图将随着改变。组合模式是在视图里面用的,用来组织页面结构。策略模式,用在视图和控制器之间。
下面我贴一下个人见解的代码,在这里的MVC三层,我没有用观察者模式,大家可以查下资料看下是怎么加上去的。
代码详解
三层:
MVC:
分析与对比
也许你根据上面的两篇代码还是看不出来MVC与三层架构代码之前的差别。那么我这样说一下看你是否可以理解:
在Model中,需要做三层中DAL层中需要做的东西,但是业务逻辑也需要在这里实现。而控制器,则是实现视图中需要一个功能时,去Model中调用,在页面中怎么显示,也是控制器控制的。也就是用控制器实现了视图和Model的解耦。所以我感觉Model还可以进行划分,将业务逻辑和数据进行分离,这样就到了我们熟悉的三层架构上了。
对于三层架构,我个人感觉是将控制器放到了UI层,如果把代码进行一下分离,你能够从UI层看到控制器的影子。
所以我感觉不管是MVC,还是三层架构,其目的是一直的:解耦。
如果说MVC是复合模式,而三层是架构的话,我觉得有点牵强。因为三层其实也是利用了设计模式(外观),还有什么模式,可以自己去慢慢发现。所以二者在本质上,其实是一样的。
尾声
至于多层架构,无非就是在三层架构的基础上,加上接口,再引入设计模式。
对于设计模式以及架构的学习,还在继续,路漫漫其修远兮,吾将上下而求索。