2009-10-21 15:01:48 來源:
一、什么是架構(gòu)
在牛津高階詞典(第7版)中,架構(gòu)(architecture)一詞的解釋是:the design an structure of a computer system,而架構(gòu)師(architect)一詞的解釋是:a person who is responsible for planning or creating an idea, an event or a situation。
針對于企業(yè)應(yīng)用,依據(jù)不同的關(guān)注點,架構(gòu)可以分為如下幾類:
業(yè)務(wù)架構(gòu)(Business Architecture):關(guān)注于業(yè)務(wù)及其流程;
應(yīng)用架構(gòu)(Application Architecture):關(guān)注于應(yīng)用系統(tǒng)設(shè)計;
基礎(chǔ)架構(gòu)(Infrastructure Architecture):關(guān)注于基礎(chǔ)技術(shù);
數(shù)據(jù)架構(gòu)(Data Architecture):關(guān)注于數(shù)據(jù)存儲及其規(guī)劃;
這里所說的企業(yè)應(yīng)用架構(gòu),即屬于應(yīng)用架構(gòu),包括如下幾個部分:
1.目標(biāo)和愿景。即應(yīng)用系統(tǒng)所面臨的問題域。
2.評價指標(biāo)。從哪些緯度和指標(biāo)來評價和度量解決方案。
3.原則和方法論。為解決這些問題,所采用的原則及其方法論。
4.技術(shù)架構(gòu)。架構(gòu)的技術(shù)層面,給出相應(yīng)的設(shè)計以及結(jié)構(gòu),描述應(yīng)用系統(tǒng)。
5.組織因素。架構(gòu)的組織層面,組織的各個部分如何參與。
二、架構(gòu)的目標(biāo)和愿景
1. 架構(gòu)的問題來源
(1)外部,客戶要求包括了業(yè)務(wù)和技術(shù)上。
(2)內(nèi)部,組織管理、項目管理和技術(shù)發(fā)展上。
特別的,架構(gòu)需要解決的非業(yè)務(wù)問題包括如下:
A.系統(tǒng)目標(biāo):系統(tǒng)性能,穩(wěn)定性等。
B.項目目標(biāo):開發(fā)成本,項目質(zhì)量等
C.項目過程:需求的不確定性和開發(fā)過程的團(tuán)隊協(xié)作性,即所謂的開發(fā)管理。
2. 架構(gòu)的核心問題
問題可分解為兩種類型,業(yè)務(wù)上和技術(shù)上。
(1)業(yè)務(wù)上。問題域分解為,邏輯的縱向抽象層次,以及邏輯的橫向模塊分解和集成。
(2)技術(shù)上。問題域分解為,縱向的技術(shù)主題,以及橫向的技術(shù)職責(zé)的分解和集成。
A.領(lǐng)域化
傳統(tǒng)的架構(gòu)模式是三層或者四層模式,雖然從技術(shù)上有效的橫向分解系統(tǒng)結(jié)構(gòu),但對業(yè)務(wù)模型如何建立,如何進(jìn)行層次間傳遞,模型間關(guān)聯(lián)關(guān)系,以及與服務(wù)邏輯耦合等問題沒有給出進(jìn)一步的細(xì)化,也帶來了很多問題。
此外,在傳統(tǒng)設(shè)計方法下,分析模型和設(shè)計模型的轉(zhuǎn)換也是一個大的問題。
B.組件化
實施組件化或者說模塊化,其需求分為兩個層面。
1.內(nèi)部管理,可以幫助開發(fā)過程中進(jìn)行業(yè)務(wù)切分,幫助控制進(jìn)度,降低風(fēng)險,以及財務(wù)分析;對于大型復(fù)雜的項目,也有利于知識的傳遞和積累。
2.銷售需要,All in one的系統(tǒng)因不符合發(fā)展趨勢而不利于銷售;組件化有助于產(chǎn)品銷售,可以針對客戶,將若干組件打包銷售,同時減少集成的風(fēng)險。
C.產(chǎn)品化
C.1 定制化問題
定制化問題的由來:1.面向行業(yè)的應(yīng)用通常沒有標(biāo)準(zhǔn),或者完備的標(biāo)準(zhǔn);2.通常產(chǎn)品的開發(fā)是針對于通用或者公共需求,不針對于特定客戶;3.而一個確定的客戶,其自身的業(yè)務(wù)差異和管理差異導(dǎo)致需求的差異性。
這種現(xiàn)象尤其在缺乏標(biāo)準(zhǔn)的行業(yè)應(yīng)用中,以及系統(tǒng)的產(chǎn)品化過程中。
傳統(tǒng)的簡單的解決方式是為每個客戶單獨維護(hù)一個系統(tǒng)分支,在此情況下提供維護(hù)和升級,則維護(hù)成本巨大;因此如何解決領(lǐng)域的定制化就成為一個重大問題。
C.2 升級問題
領(lǐng)域需求每次進(jìn)一步的挖掘和實現(xiàn),都意味著領(lǐng)域的升級。但升級面臨的諸多問題:數(shù)據(jù)遷移,舊版本的兼容問題,依賴關(guān)聯(lián)等等,在組件化和定制化情況下,還面臨定制化兼容和沖突檢測。
C.3 國際化問題
(1)文本消息國際化
國際化消息沒有直接呈現(xiàn),而是中間存儲后呈現(xiàn);
(2)布局國際化
阿拉伯人是從右到左;
(3)業(yè)務(wù)時間,跨時區(qū);
(4)計量單位,多幣種;
D.平臺化
應(yīng)用系統(tǒng)可以分為兩個內(nèi)容:應(yīng)用程序和基礎(chǔ)設(shè)施。應(yīng)用程序處理業(yè)務(wù)問題,而基礎(chǔ)設(shè)施處理技術(shù)問題。
來自客戶的要求是包含業(yè)務(wù)和技術(shù)兩個方面。其中技術(shù)上包括兩種“定型和定性”,其所需的知識和技能是不同于業(yè)務(wù)上的;
此外,內(nèi)部管理也提出相應(yīng)的要求。由于技術(shù)的發(fā)展和業(yè)務(wù)發(fā)展之間的不同步,對于一個產(chǎn)品而言,同時存在技術(shù)升級和業(yè)務(wù)升級兩個需求。而同時升級存在較大的成本和風(fēng)險。
同時對于一個產(chǎn)品來說,技術(shù)方面需要較強的適應(yīng)性,能夠低成本上的適應(yīng)客戶的特別要求。
因此有效解藕技術(shù)和業(yè)務(wù)兩個部分成為必然。
3. 架構(gòu)的應(yīng)用問題
A.事務(wù)管理
數(shù)據(jù)一致性問題出現(xiàn)的原因通常是開發(fā)過程中,由于錯誤的并發(fā)和事務(wù)控制導(dǎo)致的;而在業(yè)務(wù)過程中也存在錯誤的業(yè)務(wù)操作情況。
B.并發(fā)處理
不同的業(yè)務(wù)應(yīng)用存在不同的并發(fā)場景(并發(fā)度以及存在的業(yè)務(wù)依賴),因此業(yè)務(wù)上需要明確原則和方案;而不同平臺所支持的并發(fā)方式和能力也不相同,則采用一定框架支持有助于簡化問題。
C.集成能力
業(yè)務(wù)應(yīng)用所面臨的集成問題不同,包括不同的集成環(huán)境:外部系統(tǒng),內(nèi)部系統(tǒng),遺留系統(tǒng)等;不同的集成模式:基于文件,基于數(shù)據(jù)庫表,基于消息等,導(dǎo)致所需的集成方法及其能力也不同。
4. 架構(gòu)的設(shè)計問題
分析設(shè)計和開發(fā)實現(xiàn)存在著一定的差異性:分析設(shè)計屬于知識級,而開發(fā)實現(xiàn)屬于操作級的。
分析設(shè)計是需求和實現(xiàn)的中間橋梁,因而設(shè)計必須解決系統(tǒng)邊界的合法性,內(nèi)部邏輯解藕的合理性和實現(xiàn)的可達(dá)性(設(shè)計的類方法為實現(xiàn)的30%-70%)。而開發(fā)實現(xiàn)需不斷重構(gòu)代碼,采用約定和框架能力等技術(shù)手段解決開發(fā)的實際問題,解決程序級別的健壯性,可讀性,可維護(hù)性以及可測試性。
傳統(tǒng)的方式,分析設(shè)計存在于文檔中,而開發(fā)實現(xiàn)存在于代碼中。兩者的割裂導(dǎo)致溝通的困難,也導(dǎo)致了開發(fā)工程中具大的風(fēng)險——分析設(shè)計和最終開發(fā)實現(xiàn)的不一致性。
三、架構(gòu)的評價指標(biāo)
1. 財務(wù)角度
在傳統(tǒng)的財務(wù)核算機制中,系統(tǒng)或者產(chǎn)品的開發(fā)通常屬于成本中心,對于IT企業(yè)來說,電腦設(shè)備,辦公室等屬于沉沒成本,而IT人員的工資屬于可變成本,是成本的核心部分,為了控制成本,就需要減少項目的開發(fā)時間。
因此架構(gòu)一個重要的關(guān)注點在于控制開發(fā)成本和維護(hù)成本,通常講維護(hù)成本是開發(fā)成本的3倍。降低開發(fā)成本核心,在于提高效率、提高適應(yīng)需求變化的能力。
2. 技術(shù)角度
技術(shù)角度評估架構(gòu)很難說。
四、架構(gòu)的技術(shù)層面
(一)基礎(chǔ)手段
提高開發(fā)效率和品質(zhì)的基本手段是分解——即充分的分離系統(tǒng)中不同的關(guān)注點,好處不用說了,可以并發(fā)的工作,每個人面對的問題都簡單而容易操作。而與分解對應(yīng)的集成,只有提供了好的集成能力,分解才成為現(xiàn)實,而只有分解了,才能清晰的提供業(yè)務(wù)更多適應(yīng)性。
分解和集成的手段分為編程語言和技術(shù)框架兩個層面。所謂語言就是強框架,而框架就是弱語言。
A. 開發(fā)語言
現(xiàn)代面向?qū)ο蟮恼Z言提供如下能力:抽象和派生能力,以及接口隔離能力。實際提供兩種分解和集成能力:
(1)把邏輯分解在兩個層次中,而通過繼承的方式把兩個部分集成在一起。
(2)把邏輯的外觀和實現(xiàn)分解在兩個地方,而通過接口實現(xiàn)的方式把兩部分集成在一起。
另一種語言AspectJ或者C#語言2.0之后提供的特性:把流程邏輯,分解在不同的地方,而通過簽名匹配,利用代碼生成的方式來把幾部分集成在一起。
B. 應(yīng)用框架
然而語言提供的集成能力,畢竟底層,而且有限,擴展起來也格外小心。因而技術(shù)框架提供另外的集成能力就格外重要:
(1)對象關(guān)聯(lián)關(guān)系的分解和集成,如Spring提供容器管理能力
依賴注入對于依賴關(guān)系是適合的,對于服務(wù)間,技術(shù)層次間都是適合的(因為無狀態(tài));但對于聚合(整體和部分)的關(guān)系——主要是領(lǐng)域模型(有狀態(tài)的)——則不合適;
(2)模塊間關(guān)聯(lián)關(guān)系的分解和集成,如OSGi,ESB等
(3)流程邏輯的分解和集成,如Spring Web Flow以及jBPM。
(4)不同系統(tǒng)的類型分解和集成,如Spring利用動態(tài)代理提供的Exporter模式。
(5)模式的封裝集成,設(shè)計應(yīng)當(dāng)是面向服務(wù)的設(shè)計,但是服務(wù)的暴露方式以及模式可以有很多種,比如API,Web Service,RMI,以及Command模式,Event模式等,框架應(yīng)該利用動態(tài)代理等技術(shù)對于這些服務(wù)暴露方式,模式進(jìn)行封裝。
C. 分析設(shè)計
設(shè)計中涉及到的組合方式,包括類(接口)組合,繼承組合以及產(chǎn)生組合三種。三種組合各有優(yōu)缺點,設(shè)計時適應(yīng)不同場合。這就涉及到現(xiàn)有面向?qū)ο蟮脑O(shè)計粒度:類(第一公民)和方法(二等公民)。
類(接口)組合實際上復(fù)用的是類一級粒度的設(shè)計,而繼承組合本質(zhì)上是一種有方向的組合,復(fù)用的方法一級粒度的設(shè)計,提供與或非的邏輯操作。而產(chǎn)生組合,例如AspectJ,也是在方法一級粒度的設(shè)計復(fù)用。
因為繼承組合復(fù)用在方法一級的粒度上,因而其更適合存在嵌入式,最低粒度的差異性的設(shè)計中,借助于虛擬機的支持,無需額外工作。而類(接口)在類一級上,更適合在更高一級的邏輯復(fù)用上;其實不一定需要接口,普通的類也可以,但是在這一級粒度的差異性替換,采用接口優(yōu)于類,因此稱為類(接口)組合;接口是類(接口)組合的編碼需要;對于接口一級,需要通過框架的集成和適配來提供差異性的設(shè)計。產(chǎn)生組合其實也是在方法一級,不過更關(guān)注于廣泛的橫切面,同時由于現(xiàn)有的語言對它的支持不同,Java需要額外的編譯器,而.Net則是在內(nèi)置編譯器上支持。
更高一級的組合是組件組合。對于組件邊界的設(shè)計,遵從兩點:嚴(yán)格把關(guān)設(shè)計和代碼優(yōu)先。接口優(yōu)先的設(shè)計通常導(dǎo)致成本太高,實踐中會導(dǎo)致開發(fā)人員在項目的進(jìn)度壓力下把代碼寫在不合適的地方。
D. 開發(fā)方式
常見的開發(fā)方式可以歸結(jié)為3類:開發(fā)式編程(Programmatic programming),聲明式編程(Declarative programming)和產(chǎn)生式編程(Generative programming)。
E. 小結(jié)
通常語言作為架構(gòu)的基礎(chǔ),語言的設(shè)計帶來的好處遠(yuǎn)遠(yuǎn)高于框架和模式,但其引入和更換也是有巨大風(fēng)險的;而通過提供強大的框架能力,框架盡可能多的完成技術(shù)問題,并通過元數(shù)據(jù),模式以及約定降低業(yè)務(wù)和框架的耦合。避免因為框架升級帶來不必要的成本。
Meta Programming的最高層次是語言級別直接解決,比如,Smalltalk, Ruby, Python, 還有其他Reflection支持的非常好的語言。甚至STL等template技術(shù),也可以算作語言級別。 Code Generation 是最低級別的Meta Programming解決方案,技術(shù)含量也最低。這個級別必須超越,才能夠真正達(dá)到質(zhì)變,完全跳出概念炒作的層次。
從技術(shù)手段上,提高開發(fā)效率的另外兩個手段是代碼生成和類庫引用。但代碼生成和類庫引用,都只解決了邏輯的分解能力,沒有提供集成能力,所以一般情況下需要提供框架集成,尤其代碼生成需要在系統(tǒng)的最外層,避免集成帶來的問題。
代碼生成也沒有那么壞,關(guān)鍵在于生成什么,如果是生成結(jié)構(gòu)性的代碼,由于往往不是最終的產(chǎn)物,就存在同步維護(hù)問題;同時這種代碼是大都可以用template完成的。
但如果生成的是功能性代碼,這類代碼是最終執(zhí)行代碼,那么通常就把用于設(shè)計的代碼看作是最終產(chǎn)物,最明顯的例子是DSL。
免責(zé)聲明:本網(wǎng)站(http://www.www.gypb.net/)內(nèi)容主要來自原創(chuàng)、合作媒體供稿和第三方投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實,并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
本網(wǎng)站刊載的所有內(nèi)容(包括但不僅限文字、圖片、LOGO、音頻、視頻、軟件、程序等)版權(quán)歸原作者所有。任何單位或個人認(rèn)為本網(wǎng)站中的內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,請及時通知本站,予以刪除。
