設計模式-架構-類庫的區別

下面我打算用一個比方來詮釋我的理解
我類比的例子是蓋房子,我先從設計模式說起。人類從住山洞到現在的住高樓大廈中間的居住形態經歷了無數次的演變,不同的
人用自己的智慧詮釋了對居住環境的理解,並且由於有了文字這些經驗都被記錄下來了。現在打個比方,如果讓學計算機的你在一個深
山老林裏,什麼都不給你,你能蓋出什麼樣的房子呢?我猜肯定是什麼也蓋不出來,只能去睡山洞了,爲什麼呢,因爲你什麼都沒有,沒有材料
,沒有工具,甚至沒有蓋房子的知識,這時有另一個答案,如果你足夠長壽,你也可以自己把所有蓋房子要用到的材料,工具,知識都發明出來
。這裏提到的材料,工具,知識,都是前人不斷積累而成的,我想這些當中的每一項,每一項個具體的點都是爲了解決實際蓋房子過程
中遇到的各種問題而產生的。我認爲這個就可以解釋編程當中的設計模式,當然要注意到我打的比方當中與編程的背景是不同的,說不通的地方
肯定是有的,但不要太鑽牛角尖。設計模式,就是一種設計思想,是解決問題的思路,當你以後遇到其他類似問題(想想,當你蓋好第一個房子
以後,再讓你蓋一個,你是不是就有思路了?),你可以採用類似的思路(設計模式)來解決。再說說什麼是架構,蓋房子的時候,你
再蓋之前,先要想想怎麼蓋,蓋成什麼樣子的,還有會影響你蓋房子的一些因素,例如四季的溫度,房子的朝向,房子的位置等等,總之在綜合
考慮各種因素的影響下,最終你知道這個房子應該大概是個什麼樣子了,給你紙筆你都可以把房子的大概樣子給畫出來。那麼恭喜你,你的房子
的架構確定了。在開發一個項目的時候,當你綜合考慮各種因素後,確定的項目的樣子就是架構。那麼什麼是框架呢,還是說蓋房子,
會蓋房子的人很多,但有的人特別會蓋某種房子,例如2層小樓,於是他就創業了,專門爲想蓋2層小樓的人提供方法,各種規範化的材料和工具
,這個人在創業的過程中,又不斷的發展自己的理論,於是他又能蓋高樓和歐式建築,甚至金字塔了,但你要想建那種建築,必須得用他提供的
方法,按照他的建築規範,用它的材料和工具,才能建的成,如果你用他的方法,別人的材料和工具,那這個房子就有可能壞掉。這裏,可以說
,這個人他提供給你的就是一種蓋房子的框架。同理,如果你要開發個程序,在一個優秀開發框架的幫助下,你就可以少走很多彎路。
框架的類比還沒完,假如你什麼框架都不用,你自己會蓋房子的基本原理,你也能把房子蓋起來,但就是沒別人蓋的好看,蓋的快,門也是手工
制的,很粗糙,而且蓋的時候還經常遇到不明白的地方,然後你到處找資料,最後弄懂了,問題才得以解決。那麼回過頭來想想,爲什麼你用框
架的時候有些問題就遇不到,那是因爲框架再代替你做很多事情,框架解決了怎樣蓋房子的問題,而只讓你去考慮蓋個什麼樣的房子的問題。(
這就是開發框架追求的,集中考慮業務邏輯的類比)。框架和設計模式有什麼關係呢,正像前面所說的,框架是解決怎麼樣蓋房子,而
你仍然要解決蓋個什麼樣的房子,這實際上是將一件事分成的兩個階段,第一個階段是聰明的人從蓋房子的過程中總結抽象出來的一種普遍使用
的理論,從而提高了蓋房子的效率,降低了蓋房子的難度。而解決如何蓋房子的問題的時候,這就像是在解決一類問題,而具體蓋房子就像是一
個實例,實際上他們在形成過程中有類似的地方,都會遇到問題,而遇到問題時就都會運用一些設計模式加以解決。只有知道怎麼蓋房
子,考慮蓋什麼樣的房子纔是合理的做法,同樣,只有熟悉各種設計模式,才能研究說更多更好的蓋房子的方法。這裏面有個知識演變的過程。
正像你開發一個項目時,你先要知道怎麼開發項目,怎麼用開發框架來開發項目(不要問爲什麼用開發框架了,前面的蓋房子的論述中有提到)
,而這個開發框架在形成過程中必然要用到各種設計模式。但在開發具體的項目的時候,設計模式還是會被用到的,這一方面是框架的原因,另
一方面是設計模式本身的性質決定的。所以設計模式應該是貫穿開發過程始終的,編碼級的思想理論。這時再談到框架,我想框架就是編碼級的
方法論,而架構就是項目級的設計理論。最後再談談類庫和框架的關係,大家都知道面向對象的開發框架中都有各種類庫,很多都功能
類似,又有不同的差別,這個可以打個和蓋房子有點關係的理論,比如門,有許多種,每種都是用不同的方式批量生產出來的。爲了提高蓋房子
的效率,降低難度,我會從各種門中找出符合我要求的門,或者說生產這種門的方法,將這種方法納入我提出的這種蓋房子理論的體系中來,這
種生產門的方法,就是一種類庫,生產其他門的方法是其他的類庫,另外還有生產窗的,燈的,鎖的等等,等等。從中不難看出類庫和
框架的關係,可以說類庫的結合體就組成了一種框架。但之所以說是框架,而不是類庫的結合體,就是因爲他們是有機的結合體,這個有機說的
是一種機制,一種思想,是框架的核心。類庫和設計模式的關係就很簡單了,類庫的實現過程中是直接應用了各種設計模式的。因此按
照從小到大的順序我們排列一下標題提到的這四個名詞,就是:設計模式,類庫,框架,架構。如果從作用來講,是個三角形或者V
字形的順序,文字描述爲,類庫會用到設計模式,框架會用到類庫,架構會用到框架,架構定了,開始做項目的時候還會編寫類,還會用到設計
模式最後再延伸一點,我認爲這四個詞是站在編碼角度在論述的,另一個角度就是項目的角度,同樣也有幾個詞,從小到大依次是,方
法,過程,工程,管理。簡單說一下這四個詞背後所代表的概念。方法,例如TDD,BDD,MDD,DDD,OOP/OOA,AOP等等過程,例
如Scrum,敏捷開發,極限開發,瀑布工程,例如需求,設計,編碼,測試,維護管理,例如生命週期,里程碑,跟蹤,報表,成本覈算
,績效考覈等等
上面的內容來自http://www.cnblogs.com/fsjohnhuang/archive/2011/12/02/2272367.html
看了這麼多,是不是有點暈暈的。
下面我舉個例子
框架:spring,hibernate ,jquery
架構:系統的架構,數據持久層,中間業務層,表現成等
設計模式:23種設計模式,可大可小,解決某一問題的思路

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章