也谈设计模式,架构,框架和类库的区别 (转载)
看了廖大的《设计模式,框架,架构》http://www.dualface.com/blog/?p=546
感觉受益良多,下面我打算用一个比方来诠释我的理解
我类比的例子是盖房子,我先从设计模式说起。人类从住山洞到现在的住高楼大厦中间的居住形态经历了无数次的演变,不同的
人用自己的智慧诠释了对居住环境的理解,并且由于有了文字这些经验都被记录下来了。现在打个比方,如果让学计算机的你在一个深
山老林里,什么都不给你,你能盖出什么样的房子呢?我猜肯定是什么也盖不出来,只能去睡山洞了,为什么呢,因为你什么都没有,没有材料
,没有工具,甚至没有盖房子的知识,这时有另一个答案,如果你足够长寿,你也可以自己把所有盖房子要用到的材料,工具,知识都发明出来
。这里提到的材料,工具,知识,都是前人不断积累而成的,我想这些当中的每一项,每一项个具体的点都是为了解决实际盖房子过程
中遇到的各种问题而产生的。我认为这个就可以解释编程当中的设计模式,当然要注意到我打的比方当中与编程的背景是不同的,说不通的地方
肯定是有的,但不要太钻牛角尖。设计模式,就是一种设计思想,是解决问题的思路,当你以后遇到其他类似问题(想想,当你盖好第一个房子
以后,再让你盖一个,你是不是就有思路了?),你可以采用类似的思路(设计模式)来解决。再说说什么是架构,盖房子的时候,你
再盖之前,先要想想怎么盖,盖成什么样子的,还有会影响你盖房子的一些因素,例如四季的温度,房子的朝向,房子的位置等等,总之在综合
考虑各种因素的影响下,最终你知道这个房子应该大概是个什么样子了,给你纸笔你都可以把房子的大概样子给画出来。那么恭喜你,你的房子
的架构确定了。在开发一个项目的时候,当你综合考虑各种因素后,确定的项目的样子就是架构。那么什么是框架呢,还是说盖房子,
会盖房子的人很多,但有的人特别会盖某种房子,例如2层小楼,于是他就创业了,专门为想盖2层小楼的人提供方法,各种规范化的材料和工具
,这个人在创业的过程中,又不断的发展自己的理论,于是他又能盖高楼和欧式建筑,甚至金字塔了,但你要想建那种建筑,必须得用他提供的
方法,按照他的建筑规范,用它的材料和工具,才能建的成,如果你用他的方法,别人的材料和工具,那这个房子就有可能坏掉。这里,可以说
,这个人他提供给你的就是一种盖房子的框架。同理,如果你要开发个程序,在一个优秀开发框架的帮助下,你就可以少走很多弯路。
框架的类比还没完,假如你什么框架都不用,你自己会盖房子的基本原理,你也能把房子盖起来,但就是没别人盖的好看,盖的快,门也是手工
制的,很粗糙,而且盖的时候还经常遇到不明白的地方,然后你到处找资料,最后弄懂了,问题才得以解决。那么回过头来想想,为什么你用框
架的时候有些问题就遇不到,那是因为框架再代替你做很多事情,框架解决了怎样盖房子的问题,而只让你去考虑盖个什么样的房子的问题。(
这就是开发框架追求的,集中考虑业务逻辑的类比)。框架和设计模式有什么关系呢,正像前面所说的,框架是解决怎么样盖房子,而
你仍然要解决盖个什么样的房子,这实际上是将一件事分成的两个阶段,第一个阶段是聪明的人从盖房子的过程中总结抽象出来的一种普遍使用
的理论,从而提高了盖房子的效率,降低了盖房子的难度。而解决如何盖房子的问题的时候,这就像是在解决一类问题,而具体盖房子就像是一
个实例,实际上他们在形成过程中有类似的地方,都会遇到问题,而遇到问题时就都会运用一些设计模式加以解决。只有知道怎么盖房
子,考虑盖什么样的房子才是合理的做法,同样,只有熟悉各种设计模式,才能研究说更多更好的盖房子的方法。这里面有个知识演变的过程。
正像你开发一个项目时,你先要知道怎么开发项目,怎么用开发框架来开发项目(不要问为什么用开发框架了,前面的盖房子的论述中有提到)
,而这个开发框架在形成过程中必然要用到各种设计模式。但在开发具体的项目的时候,设计模式还是会被用到的,这一方面是框架的原因,另
一方面是设计模式本身的性质决定的。所以设计模式应该是贯穿开发过程始终的,编码级的思想理论。这时再谈到框架,我想框架就是编码级的
方法论,而架构就是项目级的设计理论。最后再谈谈类库和框架的关系,大家都知道面向对象的开发框架中都有各种类库,很多都功能
类似,又有不同的差别,这个可以打个和盖房子有点关系的理论,比如门,有许多种,每种都是用不同的方式批量生产出来的。为了提高盖房子
的效率,降低难度,我会从各种门中找出符合我要求的门,或者说生产这种门的方法,将这种方法纳入我提出的这种盖房子理论的体系中来,这
种生产门的方法,就是一种类库,生产其他门的方法是其他的类库,另外还有生产窗的,灯的,锁的等等,等等。从中不难看出类库和
框架的关系,可以说类库的结合体就组成了一种框架。但之所以说是框架,而不是类库的结合体,就是因为他们是有机的结合体,这个有机说的
是一种机制,一种思想,是框架的核心。类库和设计模式的关系就很简单了,类库的实现过程中是直接应用了各种设计模式的。因此按
照从小到大的顺序我们排列一下标题提到的这四个名词,就是:设计模式,类库,框架,架构。如果从作用来讲,是个三角形或者V
字形的顺序,文字描述为,类库会用到设计模式,框架会用到类库,架构会用到框架,架构定了,开始做项目的时候还会编写类,还会用到设计
模式最后再延伸一点,我认为这四个词是站在编码角度在论述的,另一个角度就是项目的角度,同样也有几个词,从小到大依次是,方
法,过程,工程,管理。简单说一下这四个词背后所代表的概念。方法,例如TDD,BDD,MDD,DDD,OOP/OOA,AOP等等过程,例
如Scrum,敏捷开发,极限开发,瀑布工程,例如需求,设计,编码,测试,维护管理,例如生命周期,里程碑,跟踪,报表,成本核算
,绩效考核等等
欢迎添加我的公众号一起深入探讨技术手艺人的那些事!
如果您觉得本文的内容有趣就扫一下吧!捐赠互勉!