設(shè)計模式<框架<架構(gòu)<平臺,從復(fù)用角度講,設(shè)計模式是代碼級復(fù)用、框架是模塊級復(fù)用、架構(gòu)是系統(tǒng)級復(fù)用、平臺是企業(yè)應(yīng)用級復(fù)用。
為什么要先說設(shè)計模式?因為設(shè)計模式在這些概念中是最基本的,而且也比較簡單。那么什么是設(shè)計模式呢?說的直白點,設(shè)計模式就是告訴你針對特定問題如何組織類、對象和接口之間的關(guān)系,是前人總結(jié)的經(jīng)驗。比如我要在代碼中實現(xiàn)一個全局唯一的配置類,那么就使用Singleton模式。設(shè)計模式在實際編碼工作和設(shè)計框架時會被使用到,而更高層的架構(gòu)和平臺則不會太關(guān)注它。
做WEB開發(fā)接觸到最多的框架可數(shù)ORM框架,ORM框架只是所有數(shù)據(jù)關(guān)系映射框架的統(tǒng)稱,具體的如NHibernate、ActiveRecord等,框架是為了解決特定問題而存在的,其它諸如模板框架、緩存框架,框架不能直接使用,需要二次開發(fā)。
軟件體系結(jié)構(gòu)通常被稱為架構(gòu),指可以預(yù)制和可重構(gòu)的軟件框架結(jié)構(gòu)。從大的層面來說,比如針對公司業(yè)務(wù)的B2C網(wǎng)站系統(tǒng)架構(gòu),里面可能會用到多種解決各方面問題的框架,關(guān)注的是技術(shù)整合、擴展、可維護性。換個角度,在框架中也會涉及到架構(gòu)問題,比如開發(fā)NHibernate框架,也需要考慮如何進行設(shè)計。
平臺的概念類似框架,但又結(jié)合的架構(gòu)的考慮,它是更高層面上的“框架”,準確說是一種應(yīng)用。它是針對企業(yè)用戶,為解決企業(yè)業(yè)務(wù)需要而形成的產(chǎn)品。
架構(gòu)和模式應(yīng)該是一個屬于相互涵蓋的過程,但是總體來說Architecture更加關(guān)注的是所謂的High-Level Design,而模式關(guān)注的重點在于通過經(jīng)驗提取的“準則或指導(dǎo)方案”在設(shè)計中的應(yīng)用。在不同的層面上,模式提供不同層面的指導(dǎo)。根據(jù)處理問題的粒度不同,從高到低,模式分為3個層次:架構(gòu)模式(Architectural Pattern)、設(shè)計模式(Design Pattern)、實現(xiàn)模式(Implementation Pattern).架構(gòu)模式是模式中的最高層次,描述軟件系統(tǒng)里的基本的結(jié)構(gòu)組織或綱要,通常提供一組事先定義好的子系統(tǒng),指定它們的責任,并給出把它們組織在一起的法則和指南。比如,用戶和文件系統(tǒng)安全策略模型,N-層結(jié)構(gòu),組件對象服務(wù)等,我們熟知的MVC結(jié)構(gòu)也屬于架構(gòu)模式的層次。一個架構(gòu)模式常??梢苑纸獬珊芏鄠€設(shè)計模式的聯(lián)合使用。設(shè)計模式是模式中的第二層次,用來處理程序設(shè)計中反復(fù)出現(xiàn)的問題。例如,GOF總結(jié)的23個基本設(shè)計模式——Factory Pattern, Observer Pattern等等。實現(xiàn)模式是最低也是最具體的層次,處理具體到編程語言的問題。比如,類名,變量名,函數(shù)名的命名規(guī)則;異常處理的規(guī)則等等。
框架不是構(gòu)架(即軟件體系機構(gòu))。體系結(jié)構(gòu)確定了系統(tǒng)整體結(jié)構(gòu)、層次劃分,不同部分之間的協(xié)作等設(shè)計考慮。框架比架構(gòu)更具體。更偏重于技術(shù)涉嫌。確定框架后,軟件體系結(jié)構(gòu)也隨之確定,而對于同一軟件體系結(jié)構(gòu)(比如Web開發(fā)中的MVC),可以通過多種框架來實現(xiàn)。
設(shè)計模式和框架在軟件設(shè)計中是兩個不同的研究領(lǐng)域。設(shè)計模式研究的是一個設(shè)計問題的解決方法,一個模式可應(yīng)用于不同的框架和被不同的語言所實現(xiàn);而框架則是一個應(yīng)用的體系結(jié)構(gòu),是一種或多種設(shè)計模式和代碼的混合體雖然它們有所不同,但卻共同致力于使人們的設(shè)計可以被重用,在思想上存在著統(tǒng)一性的特點,因而設(shè)計模式的思想可以在框架設(shè)計中進行應(yīng)用。
框架和設(shè)計模式存在著顯著的區(qū)別,主要表現(xiàn)在二者提供的內(nèi)容和致力應(yīng)用的領(lǐng)域。
1)、從應(yīng)用領(lǐng)域上分,框架給出的是整個應(yīng)用的體系結(jié)構(gòu);而設(shè)計模式則給出了單一設(shè)計問題的解決方案,并且這個方案可在不同的應(yīng)用程序或者框架中進行應(yīng)用。
2)、從內(nèi)容上分,設(shè)計模式僅是一個單純的設(shè)計,這個設(shè)計可被不同語言以不用方式來實現(xiàn);而框架則是設(shè)計和代碼的一個混合體,編程者可以用各種方式對框架進行擴展,進而形成完整的不同的應(yīng)用。
3)、以第二條為基礎(chǔ),可以得出設(shè)計模式比框架更容易移植:框架一旦設(shè)計成形,雖然還沒有構(gòu)成完整的一個應(yīng)用,但是以其為基礎(chǔ)進行應(yīng)用的開發(fā)顯然要受制于框架的實現(xiàn)環(huán)境;而設(shè)計模式是與語言無關(guān)的,所以可以在更廣泛的異構(gòu)環(huán)境中進行應(yīng)用。
總之,框架是軟件,而設(shè)計模式是軟件的知識體。
MVC是一種模式,但是ASP.NET MVC就是一個框架。