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