26
什么叫架構(gòu)夸浅?
Fore metaphors for architecture
Architecture as blueprint. / Architecture asliterature. / Architecture as language. / Architecture as decision.
架構(gòu)的前喻——架構(gòu)作為藍(lán)圖冤荆。/? 架構(gòu)作為文獻(xiàn)。/ 架構(gòu)作為語言歇终。/ 架構(gòu)作為決定社证。
軟件架構(gòu),以前沒有統(tǒng)一的定義评凝,不同的人從不同的角度定義了這個(gè)概念追葡。那當(dāng)然是哪些人的定義比較全面客觀有影響力,我們就用哪個(gè)人的定義了奕短。
架構(gòu)找到了四種比喻宜肉,現(xiàn)在看起來還不太準(zhǔn)確,后續(xù)會修正的篡诽。架構(gòu)崖飘,它是需求和設(shè)計(jì)之間的一座橋梁橋榴捡,它連接了我們的需求與設(shè)計(jì)杈女,從而架構(gòu)本身也成為了一門學(xué)科。軟件架構(gòu)學(xué)科無疑是公認(rèn)的學(xué)科吊圾,架構(gòu)就位于這個(gè)抽象的中心點(diǎn)达椰。
架構(gòu)要通過抽象人們的關(guān)注點(diǎn),從而針對這些關(guān)注點(diǎn)進(jìn)行分割项乒,來簡化軟件開發(fā)的復(fù)雜性啰劲,這是我們的一個(gè)中心思想。
27
視圖在某種意義上是等價(jià)的檀何,但是透視圖蝇裤,更多的是橫切的,最典型的例子频鉴,就是安全鎖栓辜,這個(gè)是軟件和硬件細(xì)節(jié)配合起來,才能實(shí)現(xiàn)一個(gè)安全垛孔。
這些都是需要藕甩,功能性,內(nèi)部結(jié)構(gòu)與硬件結(jié)構(gòu)是配合在一起工作的周荐,我們的對應(yīng)點(diǎn)是涉眾狭莱,然后僵娃,從涉眾自己的視角(perspectives),看到的問題的不同方面腋妙。
就正如那個(gè)大象的故事默怨,我們需要把他們不同的視角都融合在一起,那個(gè)大象的圖像辉阶,經(jīng)過一個(gè)組裝先壕,形成一個(gè)完美而真實(shí)的架構(gòu),這就是整個(gè)軟件構(gòu)架的過程谆甜,從而獲得了一個(gè)架構(gòu)設(shè)計(jì)的成果垃僚。
軟件架構(gòu)的目的,就是滿足需求的情況下规辱,一定要滿足系統(tǒng)的質(zhì)量谆棺,并將過程和結(jié)果記錄下來。
軟件工程罕袋,最終做出來的是一個(gè)具體的東西改淑,它一定是有些質(zhì)量指標(biāo)的。而架構(gòu)是在這個(gè)系統(tǒng)里面的浴讯,體現(xiàn)出那些質(zhì)量指標(biāo)朵夏,從而達(dá)到我們的目的和手段有機(jī)地統(tǒng)一在一起,我們的目的當(dāng)然是要滿足用戶需求了榆纽。
軟件最終是一堆具體的軟件質(zhì)量屬性仰猖,通過一定的手段和方法,去實(shí)現(xiàn)與滿足不同的涉眾的需要奈籽。
28
因此饥侵,Role of Software Architecture/軟件架構(gòu)的作用是,A crucial bridge between requirements and design.
它是需求與設(shè)計(jì)之間的重要橋梁衣屏。因此躏升,軟件架構(gòu)的本質(zhì)動機(jī)就是:
The software architecture discipline is centered on theidea of reducing complexity through abstraction and separation of concerns.
軟件體系結(jié)構(gòu)學(xué)科的核心是通過抽象和關(guān)注的分離來降低復(fù)雜性的思想。它為了解決在系統(tǒng)高層交互上的麻煩狼忱,處理關(guān)于設(shè)計(jì)和實(shí)施的決策膨疏,改善涉眾之間的交流,以及增強(qiáng)架構(gòu)的復(fù)用钻弄。Software architecture is really the amalgamation of the multiple perspectives a system always embodies.
軟件架構(gòu)實(shí)際上是一個(gè)系統(tǒng)始終體現(xiàn)的多重視角的融合佃却。那,軟件架構(gòu)的目的是什么呢斧蜕?
the purpose of the software architecture is to ensure that the system meets thegoals of the stakeholders with respect to various software qualities such asmaintainability, scalability, testability, etc.
軟件架構(gòu)的目的是確保系統(tǒng)能夠滿足利益干系人(涉眾)對各種軟件質(zhì)量的目標(biāo)双霍,如可維護(hù)性、可伸縮性、可測試等洒闸。
架構(gòu)師染坯,他要為這個(gè)應(yīng)用軟件確定一個(gè)參考架構(gòu),他一定要追尋一種開發(fā)方法丘逸,然后能有一個(gè)參考模型单鹿,再然后記錄下他的一些關(guān)鍵性的架構(gòu)。參考模型深纲,是對這個(gè)應(yīng)用程序連在一起的仲锄。也就是說,不同的衣服湃鹊,或者不同的風(fēng)格儒喊,你的參考模型是不一樣的。
29
不同的參考模型币呵,就構(gòu)成了不同的模式怀愧。架構(gòu)模式又分成了三類。架構(gòu)風(fēng)格余赢,是一種架構(gòu)模式芯义,風(fēng)格是模式的一種,但模式不一定是風(fēng)格妻柒,所以風(fēng)格的力度會更大一些扛拨。
我們的核心概念是應(yīng)用框架,因?yàn)槲覀兪窃诳蚣芩季S的指導(dǎo)下進(jìn)行工作的举塔,應(yīng)用框架但不是一個(gè)參考模型绑警,應(yīng)用框架里面有架構(gòu)的基本,最終的架構(gòu)是在模型之后啤贩。首先要確定的是風(fēng)格待秃,然后是架構(gòu)的機(jī)制拜秧,當(dāng)一個(gè)系統(tǒng)做完了隨著需求的變化而改變痹屹,首先改變的就是一種架構(gòu)的風(fēng)格,架構(gòu)的風(fēng)格會有很多枉氮,不同的風(fēng)格組合在一起志衍,就形成一個(gè)異構(gòu)的風(fēng)格。
比如聊替,每個(gè)企業(yè)都會去解決一個(gè)社會問題楼肪,那它都有一個(gè)架構(gòu),而架構(gòu)首先體現(xiàn)了它的價(jià)值惹悄。企業(yè)會根據(jù)具體的業(yè)務(wù)形式春叫,在一個(gè)行業(yè)里面解決問題的時(shí)候,還形成了一套自己的固定的風(fēng)格。如果暂殖,他們的風(fēng)格是一樣的价匠,那就形成了依賴性,比如電子商務(wù)這類企業(yè)呛每,電子商務(wù)構(gòu)成的一類系統(tǒng)踩窖,形成了這樣的風(fēng)格,于是晨横,所有的使用電子商務(wù)應(yīng)用系統(tǒng)洋腮,他們都有基本一致的架構(gòu)風(fēng)格,比如選了一些固定的BS(瀏覽器服務(wù)器)結(jié)構(gòu)的架構(gòu)風(fēng)格手形。
選擇了這樣的架構(gòu)啥供,就構(gòu)成了這個(gè)行業(yè)的軟件系統(tǒng),于是就體現(xiàn)出了廣義的模式库糠,這是我們整個(gè)的思路了滤灯。就是一個(gè)怎么樣的風(fēng)格,使得它可以能滿足各種需求曼玩,通過架構(gòu)使得我們能夠從需求到設(shè)計(jì)上的來解決問題鳞骤。
首先要理解的,就是架構(gòu)處于的上下文環(huán)境黍判。
比如豫尽,我們學(xué)習(xí)行業(yè)軟件,然后說一定的風(fēng)格是什么顷帖,風(fēng)格是經(jīng)驗(yàn)的一個(gè)總結(jié)美旧,因?yàn)轱L(fēng)格是某些系統(tǒng)共有的。形成了一個(gè)架構(gòu)的風(fēng)格贬墩,一個(gè)架構(gòu)的模式榴嗅。那,經(jīng)驗(yàn)從哪里來陶舞,經(jīng)驗(yàn)其實(shí)就是一種體驗(yàn)嗽测,是從實(shí)踐中來的。
行業(yè)里應(yīng)用的這些規(guī)則肿孵,這叫工程唠粥,engineering,但是我們在這個(gè)基礎(chǔ)上停做,又要有一些創(chuàng)造性晤愧,creative,那就是藝術(shù)蛉腌。任何行業(yè)里面的應(yīng)用軟件系統(tǒng)官份,都是在一定的約束規(guī)則下只厘,再去發(fā)揮你有限的創(chuàng)新性,這需要找到一個(gè)平衡舅巷,這就是架構(gòu)的風(fēng)格懈凹。
30
核心圖,實(shí)際上就演繹了這個(gè)approach悄谐。當(dāng)我們講架構(gòu)的介评,我們用的是UML,這是我們的架構(gòu)描述語言爬舰,最核心的就是要識別涉眾们陆,找到每個(gè)涉眾的關(guān)注點(diǎn),然后管理分割這些關(guān)注點(diǎn)情屹,形成一個(gè)具體的架構(gòu)的模型坪仇。
別忘了,本書的目的是什么垃你?
高度決定視野椅文。
角度改變觀念。
尺度把握人生惜颇。
因此皆刺,《框架思維》,通過一個(gè)完全真實(shí)的案例凌摄,使用模型驅(qū)動開發(fā)(MDD)的軟件工程過程的方法羡蛾,有效運(yùn)用由用例捕獲的系統(tǒng)需求(用例模型),去驅(qū)動一個(gè)強(qiáng)壯的模型驅(qū)動的架構(gòu)(MDA)的開發(fā)必須的理念和技巧锨亏。
在本書中痴怨,讀者將在框架思維的指導(dǎo)下,學(xué)會如何進(jìn)行架構(gòu)的構(gòu)思器予、定義浪藻、描述、記錄乾翔、分析爱葵、設(shè)計(jì)、實(shí)施和評估等關(guān)鍵活動末融,通過在整個(gè)軟件項(xiàng)目生命周期中钧惧,運(yùn)用UML去捕獲和交流軟件架構(gòu)決策暇韧。
我們在一個(gè)用例驅(qū)動的勾习、以架構(gòu)為中心的、迭代和增量的軟件工程過程中懈玻,學(xué)會如何架構(gòu)符合軟件架構(gòu)目標(biāo)和系統(tǒng)質(zhì)量特性的軟件架構(gòu)巧婶。
31
達(dá)到目標(biāo)時(shí)乾颁,一個(gè)讀者將具備以下能力:
熟練掌握框架思維這一普遍性科學(xué)性的方法論,熟練掌握軟件架構(gòu)的定義艺栈、范圍英岭、目標(biāo)、風(fēng)格湿右、框架诅妹、描述,驗(yàn)證和評估等毅人。
熟練掌握軟件架構(gòu)師的定義吭狡、定位、職責(zé)丈莺、評估划煮、培養(yǎng)以及與系統(tǒng)分析師、軟件設(shè)計(jì)師和項(xiàng)目管理等角色的重要區(qū)別和內(nèi)在聯(lián)系等缔俄。熟練掌握軟件構(gòu)架的過程弛秋。通過呈現(xiàn)一組架構(gòu)視點(diǎn)和架構(gòu)透視圖,為軟件架構(gòu)師改善個(gè)人和組織的軟件系統(tǒng)架構(gòu)的途徑提供具體的方向俐载。
掌握設(shè)計(jì)反映和平衡不同的涉眾需要的架構(gòu)的方法蟹略。掌握和涉眾一起交流架構(gòu)并且論證架構(gòu)滿足他們的需求的方法。聚集架構(gòu)設(shè)計(jì)的重要方面遏佣,包括常被忽略的諸如性能科乎、彈性和位置等架構(gòu)重要的方面。
以及贼急,使用場景和模式去驅(qū)動架構(gòu)的創(chuàng)建和驗(yàn)證茅茂。使用一組相關(guān)的視圖文檔化架構(gòu)。使用透視圖確保滿足系統(tǒng)的性能太抓、伸縮性和安全等重要質(zhì)量屬性空闲。熟練掌握不同層級的架構(gòu)機(jī)制,例如:分析機(jī)制走敌、設(shè)計(jì)機(jī)制和實(shí)施機(jī)制碴倾。熟練掌握分析模型、設(shè)計(jì)模型掉丽、實(shí)施模型跌榔、部署模型的開發(fā)。
因此捶障,內(nèi)容包括并不限于:
01框架思維與軟件架構(gòu)導(dǎo)論
02 UML用例分析與機(jī)制
03案例與軟件開發(fā)方法論
04思維模式與需求分析
05架構(gòu)風(fēng)格模式
06可重用的架構(gòu)資產(chǎn)
07架構(gòu)分析設(shè)計(jì)與架構(gòu)實(shí)施
08 MVC架構(gòu)風(fēng)格與RSA工具的使用
09關(guān)鍵需求決定架構(gòu)
10文檔化架構(gòu)與架構(gòu)評價(jià)依據(jù)
11面向?qū)ο蟮募軜?gòu)設(shè)計(jì)原理
32
此系列適合于已經(jīng)積累了面向?qū)ο蟮能浖到y(tǒng)開發(fā)經(jīng)驗(yàn)的項(xiàng)目經(jīng)理僧须、架構(gòu)師和設(shè)計(jì)師。以及其它想了解此類內(nèi)容的人士项炼。讀者需要了解担平,軟件工程過程和軟件項(xiàng)目的生命周期示绊,UML和建模工具,軟件開發(fā)過程暂论,軟件需求工程面褐,面向?qū)ο蟮脑O(shè)計(jì)模式。架構(gòu)集成開發(fā)環(huán)境(IDE)取胎,使用Rational Software Architect(RSA)展哭。
圖012 軟件工程過程和軟件項(xiàng)目生命周期