博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
也谈设计模式,架构,框架和类库的区别
阅读量:5088 次
发布时间:2019-06-13

本文共 2489 字,大约阅读时间需要 8 分钟。

来自:http://www.360doc.com/userhome.aspx?userid=3554006

看了廖大的《设计模式,框架,架构》http://www.dualface.com/blog/?p=546

感觉受益良多,下面我打算用一个比方来诠释我的理解

我类比的例子是盖房子,我先从设计模式说起。

人类从住山洞到现在的住高楼大厦中间的居住形态经历了无数次的演变,不同的人用自己的智慧诠释了对居住环境的理解,并且由于有了文字这些经验都被记录下来了。

现在打个比方,如果让学计算机的你在一个深山老林里,什么都不给你,你能盖出什么样的房子呢?我猜肯定是什么也盖不出来,只能去睡山洞了,为什么呢,因为你什么都没有,没有材料,没有工具,甚至没有盖房子的知识,这时有另一个答案,如果你足够长寿,你也可以自己把所有盖房子要用到的材料,工具,知识都发明出来。

这里提到的材料,工具,知识,都是前人不断积累而成的,我想这些当中的每一项,每一项个具体的点都是为了解决实际盖房子过程中遇到的各种问题而产生的。我认为这个就可以解释编程当中的设计模式,当然要注意到我打的比方当中与编程的背景是不同的,说不通的地方肯定是有的,但不要太钻牛角尖。设计模式,就是一种设计思想,是解决问题的思路,当你以后遇到其他类似问题(想想,当你盖好第一个房子以后,再让你盖一个,你是不是就有思路了?),你可以采用类似的思路(设计模式)来解决。

再说说什么是架构,盖房子的时候,你再盖之前,先要想想怎么盖,盖成什么样子的,还有会影响你盖房子的一些因素,例如四季的温度,房子的朝向,房子的位置等等,总之在综合考虑各种因素的影响下,最终你知道这个房子应该大概是个什么样子了,给你纸笔你都可以把房子的大概样子给画出来。那么恭喜你,你的房子的架构确定了。在开发一个项目的时候,当你综合考虑各种因素后,确定的项目的样子就是架构。

那么什么是框架呢,还是说盖房子,会盖房子的人很多,但有的人特别会盖某种房子,例如2层小楼,于是他就创业了,专门为想盖2层小楼的人提供方法,各种规范化的材料和工具,这个人在创业的过程中,又不断的发展自己的理论,于是他又能盖高楼和欧式建筑,甚至金字塔了,但你要想建那种建筑,必须得用他提供的方法,按照他的建筑规范,用它的材料和工具,才能建的成,如果你用他的方法,别人的材料和工具,那这个房子就有可能坏掉。这里,可以说,这个人他提供给你的就是一种盖房子的框架。同理,如果你要开发个程序,在一个优秀开发框架的帮助下,你就可以少走很多弯路。

框架的类比还没完,假如你什么框架都不用,你自己会盖房子的基本原理,你也能把房子盖起来,但就是没别人盖的好看,盖的快,门也是手工制的,很粗糙,而且盖的时候还经常遇到不明白的地方,然后你到处找资料,最后弄懂了,问题才得以解决。那么回过头来想想,为什么你用框架的时候有些问题就遇不到,那是因为框架再代替你做很多事情,框架解决了怎样盖房子的问题,而只让你去考虑盖个什么样的房子的问题。(这就是开发框架追求的,集中考虑业务逻辑的类比)。

框架和设计模式有什么关系呢,正像前面所说的,框架是解决怎么样盖房子,而你仍然要解决盖个什么样的房子,这实际上是将一件事分成的两个阶段,第一个阶段是聪明的人从盖房子的过程中总结抽象出来的一种普遍使用的理论,从而提高了盖房子的效率,降低了盖房子的难度。而解决如何盖房子的问题的时候,这就像是在解决一类问题,而具体盖房子就像是一个实例,实际上他们在形成过程中有类似的地方,都会遇到问题,而遇到问题时就都会运用一些设计模式加以解决。

只有知道怎么盖房子,考虑盖什么样的房子才是合理的做法,同样,只有熟悉各种设计模式,才能研究说更多更好的盖房子的方法。这里面有个知识演变的过程。正像你开发一个项目时,你先要知道怎么开发项目,怎么用开发框架来开发项目(不要问为什么用开发框架了,前面的盖房子的论述中有提到),而这个开发框架在形成过程中必然要用到各种设计模式。但在开发具体的项目的时候,设计模式还是会被用到的,这一方面是框架的原因,另一方面是设计模式本身的性质决定的。所以设计模式应该是贯穿开发过程始终的,编码级的思想理论。这时再谈到框架,我想框架就是编码级的方法论,而架构就是项目级的设计理论。

最后再谈谈类库和框架的关系,大家都知道面向对象的开发框架中都有各种类库,很多都功能类似,又有不同的差别,这个可以打个和盖房子有点关系的理论,比如门,有许多种,每种都是用不同的方式批量生产出来的。为了提高盖房子的效率,降低难度,我会从各种门中找出符合我要求的门,或者说生产这种门的方法,将这种方法纳入我提出的这种盖房子理论的体系中来,这种生产门的方法,就是一种类库,生产其他门的方法是其他的类库,另外还有生产窗的,灯的,锁的等等,等等。

从中不难看出类库和框架的关系,可以说类库的结合体就组成了一种框架。但之所以说是框架,而不是类库的结合体,就是因为他们是有机的结合体,这个有机说的是一种机制,一种思想,是框架的核心。

类库和设计模式的关系就很简单了,类库的实现过程中是直接应用了各种设计模式的。因此按照从小到大的顺序我们排列一下标题提到的这四个名词,就是:

设计模式,类库,框架,架构。

如果从作用来讲,是个三角形或者V字形的顺序,文字描述为,类库会用到设计模式,框架会用到类库,架构会用到框架,架构定了,开始做项目的时候还会编写类,还会用到设计模式

最后再延伸一点,我认为这四个词是站在编码角度在论述的,另一个角度就是项目的角度,同样也有几个词,从小到大依次是,方法,过程,工程,管理。

简单说一下这四个词背后所代表的概念。

方法,例如TDD,BDD,MDD,DDD,OOP/OOA,AOP等等

过程,例如Scrum,敏捷开发,极限开发,瀑布
工程,例如需求,设计,编码,测试,维护
管理,例如生命周期,里程碑,跟踪,报表,成本核算,绩效考核等等

转载于:https://www.cnblogs.com/haore147/p/7182554.html

你可能感兴趣的文章
Linux/Unix下的任务管理器-top命令
查看>>
必须掌握的八个【cmd 命令行】
查看>>
BZOJ 1876: [SDOI2009]SuperGCD( 更相减损 + 高精度 )
查看>>
sql 添加修改说明
查看>>
开发中的乱码问题
查看>>
java实现从报文中获取投保单号
查看>>
面试中的Singleton
查看>>
SPOJ - ADAQUEUE ,双端队列简单运用!
查看>>
网页转图片--- html2canvas截图
查看>>
ios调试技巧
查看>>
bzoj3376/poj1988[Usaco2004 Open]Cube Stacking 方块游戏
查看>>
lexical_cast组件
查看>>
[Noi2015]荷马史诗
查看>>
log4j 初体验
查看>>
jQuery form插件的使用--ajaxForm()和ajaxSubmit()的可选参数项对象
查看>>
在本地windows机器上安装SecureCRT客户端
查看>>
解决“Kali Linux终端打不开”
查看>>
经验教训
查看>>
VS中Ctrl+F5(开始执行不调试)一闪而过问题
查看>>
js构造造函数
查看>>