程序員:.NET架構(gòu)與模式

字號(hào):

軟件體系結(jié)構(gòu)通常被稱為架構(gòu),指可以預(yù)制和可重構(gòu)的軟件框架結(jié)構(gòu)。架構(gòu)尚處在發(fā)展期,對(duì)于其定義,學(xué)術(shù)界尚未形成一個(gè)統(tǒng)一的意見,而不同角度的視點(diǎn)也會(huì)造成軟件體系結(jié)構(gòu)的不同理解,以下是一些主流的標(biāo)準(zhǔn)觀點(diǎn)。
      ANSI/IEEE 610.12-1990軟件工程標(biāo)準(zhǔn)詞匯對(duì)于體系結(jié)構(gòu)定義是:“體系架構(gòu)是以構(gòu)件、構(gòu)件之間的關(guān)系、構(gòu)件與環(huán)境之間的關(guān)系為內(nèi)容的某一系統(tǒng)的基本組織結(jié)構(gòu)以及知道上述內(nèi)容設(shè)計(jì)與演化的原理(principle)”。
    Mary Shaw和David Garlan認(rèn)為軟件體系結(jié)構(gòu)是軟件設(shè)計(jì)過(guò)程中,超越計(jì)算中的算法設(shè)計(jì)和數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)的一個(gè)層次。體系結(jié)構(gòu)問題包括各個(gè)方面的組織和全局控制結(jié)構(gòu),通信協(xié)議、同步,數(shù)據(jù)存儲(chǔ),給設(shè)計(jì)元素分配特定功能,設(shè)計(jì)元素的組織,規(guī)模和性能,在各設(shè)計(jì)方案之間進(jìn)行選擇。Garlan & Shaw模型的基本思想是:軟件體系結(jié)構(gòu)={構(gòu)件(component),連接件(connector),約束(constrain)}.其中構(gòu)件可以是一組代碼,如程序的模塊;也可以是一個(gè)獨(dú)立的程序,如數(shù)據(jù)庫(kù)服務(wù)器。連接件可以是過(guò)程調(diào)用、管道、遠(yuǎn)程過(guò)程調(diào)用(RPC)等,用于表示構(gòu)件之間的相互作用。約束一般為對(duì)象連接時(shí)的規(guī)則,或指明構(gòu)件連接的形式和條件,例如,上層構(gòu)件可要求下層構(gòu)件的服務(wù),反之不行;兩對(duì)象不得遞規(guī)地發(fā)送消息;代碼復(fù)制遷移的一致性約束;什么條件下此種連接無(wú)效等。
    關(guān)于架構(gòu)的定義還有很多其他觀點(diǎn),比如Bass定義、Booch & Rumbaugh &Jacobson定義、Perry & Wolf模型[7]、Boehm模型等等,雖然各種定義關(guān)鍵架構(gòu)的角度不同,研究對(duì)象也略有側(cè)重,但其核心的內(nèi)容都是軟件系統(tǒng)的結(jié)構(gòu),其中以Garlan & Shaw模型為代表,強(qiáng)調(diào)了體系結(jié)構(gòu)的基本要素是構(gòu)件、連接件及其約束(或者連接語(yǔ)義),這些定義大部分是從構(gòu)造的角度來(lái)甚至軟件體系結(jié)構(gòu),而IEEE的定義不僅強(qiáng)調(diào)了系統(tǒng)的基本組成,同時(shí)強(qiáng)調(diào)了體系結(jié)構(gòu)的環(huán)境即和外界的交互。
    什么是模式
    模式(Pattern)的概念最早由建筑大師Christopher Alexander于二十世紀(jì)七十年代提出,應(yīng)用于建筑領(lǐng)域,八十年代中期由Ward Cunningham和Kent Beck將其思想引入到軟件領(lǐng)域,Christopher Alexander將模式分為三個(gè)部分:首先是周境(Context,也可以稱著上下文),指模式在何種狀況下發(fā)生作用;其二是動(dòng)機(jī)(System of Forces),意指問題或預(yù)期的目標(biāo);其三是解決方案(Solution),指平衡各動(dòng)機(jī)或解決所闡述問題的一個(gè)構(gòu)造或配置(Configuration)。他提出,模式是表示周境、動(dòng)機(jī)、解決方案三個(gè)方面關(guān)系的一個(gè)規(guī)則,每個(gè)模式描述了一個(gè)在某種周境下不斷重復(fù)發(fā)生的問題,以及該問題解決方案的核心所在,模式即是一個(gè)事物(thing)又是一個(gè)過(guò)程(process),不僅描述該事物本身,而且提出了通過(guò)怎樣的過(guò)程來(lái)產(chǎn)生該事物。這一定義已被軟件界廣為接受。
    軟件模式的應(yīng)用對(duì)軟件開發(fā)產(chǎn)生了重大的作用,主要表現(xiàn)在:
    軟件模式是人們?cè)陂L(zhǎng)期的設(shè)計(jì)軟件、管理組織軟件開發(fā)等實(shí)踐中大量經(jīng)驗(yàn)的提煉和抽象,是復(fù)用軟件設(shè)計(jì)方法、過(guò)程管理經(jīng)驗(yàn)的有力工具。模式類似于拳擊中的組合拳,它提供了一系列軟件開發(fā)中的思維套路。如,通過(guò)模式的使用,有利于在復(fù)雜的系統(tǒng)中產(chǎn)生簡(jiǎn)潔、精巧的設(shè)計(jì)。
    軟件模式為我們提供了一套簡(jiǎn)潔通用的設(shè)計(jì)、管理、組織方面的詞匯,同時(shí)模式也為我們提供了一個(gè)描述抽象事物的規(guī)范標(biāo)準(zhǔn),可大大促進(jìn)軟件開發(fā)過(guò)程中人與人之間的交流,而軟件開發(fā)中的交流是至關(guān)重要的,“軟件項(xiàng)目失敗的原因最終都可追溯到信息沒有及時(shí)準(zhǔn)確地傳遞到應(yīng)該接收它的人”。
    架構(gòu)和模式的關(guān)系
    因?yàn)榧軜?gòu)(Architecture)和模式(Pattern)在當(dāng)前的軟件開發(fā)中經(jīng)常地被提及,可是很多人容易混淆這兩個(gè)術(shù)語(yǔ),而對(duì)此,學(xué)術(shù)界也沒有一個(gè)非常統(tǒng)一的定義。
    架構(gòu)和模式應(yīng)該是一個(gè)屬于相互涵蓋的過(guò)程,但是總體來(lái)說(shuō)Architecture更加關(guān)注的是所謂的High-Level Design,而模式關(guān)注的重點(diǎn)在于通過(guò)經(jīng)驗(yàn)提取的“準(zhǔn)則或指導(dǎo)方案”在設(shè)計(jì)中的應(yīng)用,因此在不同層面考慮問題的時(shí)候就形成了不同問題域上的Pattern。模式的目標(biāo)是,把共通問題中的不變部分和變化部分分離出來(lái)。不變的部分,就構(gòu)成了模式,因此,模式是一個(gè)經(jīng)驗(yàn)提取的“準(zhǔn)則”,并且在一次一次的實(shí)踐中得到驗(yàn)證,在不同的層次有不同的模式,小到語(yǔ)言實(shí)現(xiàn)(如Singleton)大到架構(gòu)。在不同的層面上,模式提供不同層面的指導(dǎo)。根據(jù)處理問題的粒度不同,從高到低,模式分為3個(gè)層次:架構(gòu)模式(Architectural Pattern)、設(shè)計(jì)模式(Design Pattern)、實(shí)現(xiàn)模式(Implementation Pattern).架構(gòu)模式是模式中的層次,描述軟件系統(tǒng)里的基本的結(jié)構(gòu)組織或綱要,通常提供一組事先定義好的子系統(tǒng),指定它們的責(zé)任,并給出把它們組織在一起的法則和指南。比如,用戶和文件系統(tǒng)安全策略模型,N-層結(jié)構(gòu),組件對(duì)象服務(wù)等,我們熟知的MVC結(jié)構(gòu)也屬于架構(gòu)模式的層次。一個(gè)架構(gòu)模式常常可以分解成很多個(gè)設(shè)計(jì)模式的聯(lián)合使用。設(shè)計(jì)模式是模式中的第二層次,用來(lái)處理程序設(shè)計(jì)中反復(fù)出現(xiàn)的問題。例如,[GOF95]總結(jié)的23個(gè)基本設(shè)計(jì)模式——Factory Pattern, Observer Pattern等等。實(shí)現(xiàn)模式是最低也是體的層次,處理具體到編程語(yǔ)言的問題。比如,類名,變量名,函數(shù)名的命名規(guī)則;異常處理的規(guī)則等等。
    相對(duì)于系統(tǒng)分析或者設(shè)計(jì)模式來(lái)說(shuō),體系結(jié)構(gòu)從更高的層面去考慮問題,所以關(guān)注的問題就體現(xiàn)在“不變”因素上,比如系統(tǒng)部署中,更加關(guān)心應(yīng)用程序的分層分級(jí)設(shè)計(jì),而在這個(gè)基礎(chǔ)之上提出的部署方案,才是架構(gòu)考慮的重點(diǎn)。體系結(jié)構(gòu)關(guān)心應(yīng)用程序模式,更加體現(xiàn)在通過(guò)技術(shù)去解決這些業(yè)務(wù)差異帶來(lái)的影響,關(guān)心是否是分布式應(yīng)用程序,關(guān)心系統(tǒng)分層是如何設(shè)計(jì),也關(guān)心性能和安全,因此在這樣的情況之下,會(huì)考慮集群,負(fù)載平衡,故障遷移等等一系列技術(shù)。
    希望通過(guò)定義的方式來(lái)區(qū)分架構(gòu)和模式是不太可能的,因?yàn)楸緛?lái)就是交互交叉和提供服務(wù)的,它實(shí)際上是架構(gòu)模式,而不是設(shè)計(jì)模式。在大部份情況下,表現(xiàn)為下面幾個(gè)設(shè)計(jì)模式之一:Strategy模式、Mediator模式、Composite模式、Observer模式。對(duì)于熟悉架構(gòu)設(shè)計(jì)的系統(tǒng)架構(gòu)師而言,似乎可以用如下來(lái)解釋架構(gòu)和模式之間的關(guān)系:架構(gòu)是Hight-Level Design,著眼于不同業(yè)務(wù)中共性的解決方案,而模式是General Principle(通用原理)。