
45
在UML里面,UML參考手冊(cè)指南里面,也對(duì)架構(gòu)做了一個(gè)定義,我們來(lái)看UML。在參考參考手冊(cè),它是怎么定義的呢?
Semantics of architecture
Architecture is the set ofsignificant decisions about the organization of a software. It includes theselection of structural elements and the interfaces through which they areconnected, the large-scale organization of structural elements and the topologyof their connection, their behavior as specified in the collaborations amongthose elements, the important mechanisms that a available across the system,and the architectural style that guides their organization
體系結(jié)構(gòu)的語(yǔ)義
體系結(jié)構(gòu)是關(guān)于軟件組織的重要決策的集合。它包括結(jié)構(gòu)元素的選擇和他們連接的接口, 結(jié)構(gòu)元素的大規(guī)模組織和他們的連接的拓?fù)鋵W(xué), 他們的行為指定在那些之間的合作元素, 系統(tǒng)中可用的重要機(jī)制, 以及指導(dǎo)其組織的體系結(jié)構(gòu)樣式。
它說(shuō)架構(gòu)是一個(gè)系統(tǒng)的組織性的結(jié)構(gòu),它包括了把它分解成部件,它們之間的連接,還有行為與交互機(jī)制,以及系統(tǒng)設(shè)計(jì)的一些指導(dǎo)原則,或者指導(dǎo)原理。
所以這個(gè)概念就比剛才的稍微豐富了點(diǎn),剛才說(shuō)就是元素,外部可見(jiàn)元素的特性以及元素之間的關(guān)系就構(gòu)成了一個(gè)架構(gòu)。而現(xiàn)在它看到的是,有元素,有關(guān)系,還有行為與交互機(jī)制,還有整體分解的指導(dǎo)原則。
架構(gòu),怎么來(lái)理解這些語(yǔ)意?
For example, the decisionto construct a system from two layers in which each layer contains a smallnumber of subsystems that communicate in a particular way is an architecturaldecision.
Software architecture is not only concerned with structure and behavior, butalso with usage, functionality, performance, resilience, reuse,comprehensibility, economic and technology constraints and trade-offs, andaesthetic concerns.
例如, 從兩層構(gòu)建一個(gè)系統(tǒng)的決策, 其中每個(gè)層包含少量的子系統(tǒng), 以特定的方式進(jìn)行通信, 這是一個(gè)架構(gòu)決策。
軟件體系結(jié)構(gòu)不僅與結(jié)構(gòu)和行為有關(guān), 而且與使用、功能、性能、復(fù)原力、重用、可理解性、經(jīng)濟(jì)和技術(shù)約束和權(quán)衡以及審美關(guān)注有關(guān)。
46
首先我們從組成上來(lái)看看,架構(gòu)是意義重大的決策的集合。在前面,在談設(shè)計(jì)思路給大家說(shuō),架構(gòu)有四種隱喻,一個(gè)是就是架構(gòu)被當(dāng)成一種決策,而決策派就是UML的這幫人他們所倡導(dǎo)的。
而認(rèn)為架構(gòu)實(shí)際上就是包含了重要的角色的集合,這樣一種思路人被稱(chēng)為組成派。
架構(gòu),作為一種藍(lán)圖,作為一種語(yǔ)言,架構(gòu)也作為決策。決策派認(rèn)為是有關(guān)一個(gè)軟件系統(tǒng)的組織的這樣的一些重要的決策。它包括了這樣的一些結(jié)構(gòu)性的元素,以及結(jié)構(gòu)性元素的選擇,通過(guò)接口把這些元素連接在一起,還有這些元素之間的協(xié)作,有類(lèi)圖,有元素,元素之間怎么樣的關(guān)系,它們是怎么樣交互從而產(chǎn)生用例所期待的這個(gè)行為的,這都屬于架構(gòu)的內(nèi)容。
Discussion of architecture
Architectural decisionsabout the decomposition of a system into parts can be captured using models,subsystems, packages, and components.
The dependencies amongthese elements are key indicators of the flexibility of the architecture andthe difficulty of modifying the system in the future.
Another major part of anarchitecture is the mechanisms that it provides to build upon. These may becaptured with collaborations and patterns. Nonstructural decisions can becaptured using tagged values.
軟件架構(gòu)的討論
可以使用模型、子系統(tǒng)、包和組件來(lái)捕獲將系統(tǒng)分解為部件的體系結(jié)構(gòu)決策。
這些元素之間的依賴(lài)性是體系結(jié)構(gòu)靈活性的關(guān)鍵指標(biāo), 也是將來(lái)修改系統(tǒng)的難點(diǎn)。架構(gòu)的另一個(gè)主要部分是它所提供的用于構(gòu)建的機(jī)制。這些可能是通過(guò)協(xié)作和模式捕獲的??梢允褂脴?biāo)記值捕獲非的決策。
包括了這個(gè)結(jié)構(gòu)性元素的選擇,以及它們連在一起的這些結(jié)果,還有大規(guī)模的結(jié)構(gòu)性元素的組織,以及它們的拓?fù)溥B接的結(jié)構(gòu),實(shí)際上就是它們的互聯(lián)關(guān)系,運(yùn)行時(shí)的結(jié)構(gòu)。
47
概念描述的是運(yùn)行時(shí)結(jié)構(gòu),包括它的拓?fù)涞冗\(yùn)行結(jié)構(gòu),以及被詳述在這些元素中元素間的協(xié)作中間所描述的行為,所以我們知道架構(gòu)它的定義就包含了行為,以及重要的機(jī)制。
在架構(gòu)的定義里面,它不單包括了結(jié)構(gòu)模式。架構(gòu)模式都是結(jié)構(gòu)性的模式,不但包括架構(gòu)模式,它還包括了一些行為性的那些東西,以及機(jī)制。大家知道機(jī)制,是一些框架性?xún)?nèi)容,還有指導(dǎo)它們組織的架構(gòu)的風(fēng)格。
style,直接把架構(gòu)的風(fēng)格機(jī)制等等都用上去了,通過(guò)前面的論述,你就理解了,什么叫機(jī)制,什么叫架構(gòu)?
先給你舉些例子,不要求精確。但是到重用架構(gòu)資產(chǎn)的時(shí)候,這個(gè)概念理解得就很精確了,其實(shí)我們的思維方式很簡(jiǎn)單,本身就是一個(gè)迭代理解的過(guò)程,剛開(kāi)始,我們不可能第一次把所有的概念都理解得很好,我先給你講個(gè)圖像,簡(jiǎn)單的理解這個(gè)概念是怎么回事,我們?cè)儆眠@個(gè)概念慢慢往前進(jìn)。
到第二輪的時(shí)候,我們?cè)賮?lái)精確地定義這個(gè)概念,因?yàn)檫@些概念都是相關(guān)的,你沒(méi)辦法把它們摘離開(kāi)去,單獨(dú)理解,架構(gòu)是在它的機(jī)制涉及到它的風(fēng)格,還涉及到通過(guò)協(xié)作所產(chǎn)生的行為。
48
總而言之,它的圖像是什么?
是在一些組織結(jié)構(gòu)里面,有些元素,這個(gè)元素是有些接口的,能把它們連在一塊,它們通過(guò)協(xié)作也產(chǎn)生了一個(gè)行為,還有它們有一種運(yùn)行時(shí)的結(jié)構(gòu),還有設(shè)計(jì)時(shí)的結(jié)構(gòu),形成的結(jié)果,以及怎么樣做整體的結(jié)構(gòu),分解成模式和風(fēng)格,架構(gòu)定義里面包括了這些東西。
實(shí)際上是給你講一個(gè)風(fēng)格,比如說(shuō)有個(gè)角色,就是說(shuō)從兩層里面構(gòu)造一個(gè)系統(tǒng)等等之類(lèi)的,架構(gòu)不僅是跟結(jié)構(gòu)行為連在一起,它還跟一個(gè)軟件系統(tǒng)的質(zhì)量比如性能連在一起。因?yàn)槲覀円眉軜?gòu)去體現(xiàn)系統(tǒng)的質(zhì)量,所以這也是這一部分內(nèi)容。
在這個(gè)里面,架構(gòu)風(fēng)格這個(gè)詞就出現(xiàn)了,我們需要簡(jiǎn)單的描述一下架構(gòu)風(fēng)格,在1996年的書(shū)里面《軟件架構(gòu)作為一門(mén)新興學(xué)科遠(yuǎn)景》中間,提出了架構(gòu)風(fēng)格,卡耐基梅隆大學(xué)研究架構(gòu)風(fēng)格最好的。加州大學(xué)的伯克利分校的里面的歐文研究機(jī)構(gòu),架構(gòu)描述語(yǔ)言是研究得最好的。
在軟件架構(gòu)工程組里面,這兩個(gè)是世界最頂級(jí)的架構(gòu)研究組。當(dāng)然,世界上還有很多的其它架構(gòu)研究組,包括英國(guó)也有幾個(gè),在96年的書(shū)里面定義了一個(gè)主要風(fēng)格,2000年的時(shí)候,軟件架構(gòu)才成為國(guó)際標(biāo)準(zhǔn),這都是在國(guó)際標(biāo)準(zhǔn)之前定義的。
49
那,我們來(lái)看看軟件風(fēng)格是什么?
An Architectural Style
An Architectural Styledefines a family of systems in terms of a pattern of structural organization.
An architectural styledefines:
—a vocabulary of components and connector types
—a set of constraints on how they can be combined
—one or more semantic models that specify how a system’s overallproperties can be determined from the properties of its parts?
架構(gòu)風(fēng)格
架構(gòu)風(fēng)格根據(jù)結(jié)構(gòu)組織的模式來(lái)定義系統(tǒng)的系列。
體系結(jié)構(gòu)樣式定義:
-組件和連接器類(lèi)型的詞匯表
-一組約束如何組合
-一個(gè)或多個(gè)語(yǔ)義模型, 用于指定如何從其部件的屬性中確定系統(tǒng)的總體屬性
架構(gòu)風(fēng)格定義了異族的系統(tǒng),而這個(gè)系統(tǒng)是借助一個(gè)結(jié)構(gòu)組織模式來(lái)定義的一組系統(tǒng),就是說(shuō),一個(gè)系統(tǒng),它們擁有共同的核心的組織結(jié)構(gòu)模式,單靠這個(gè),這還是無(wú)法把它和架構(gòu)風(fēng)格與架構(gòu)模式區(qū)分開(kāi)來(lái)。
實(shí)際上歷史也是這樣的,是先有了架構(gòu)模式,才產(chǎn)生的架構(gòu)風(fēng)格的定義,或者說(shuō)人們把架構(gòu)模式逐漸在提煉,再往上推,引伸了出來(lái),架構(gòu)的風(fēng)格的定義里面,又是用什么詞來(lái)表達(dá)呢?
那,什么叫風(fēng)格?架構(gòu)有這三個(gè)東西,一個(gè)組件,組件之間的連接器,還有作用在這個(gè)組件和其它的約束。因此,架構(gòu)有三個(gè)要素,組件,連接器,約束,但它這個(gè)組件是廣義的。
整個(gè)架構(gòu)的描述使用UML模型里面的最基本的概念,所以我們已經(jīng)在向UML靠攏,因?yàn)閁ML已經(jīng)成為了一個(gè)國(guó)際標(biāo)準(zhǔn)。就是說(shuō)架構(gòu)已經(jīng)有了標(biāo)準(zhǔn)架構(gòu)的描述,語(yǔ)言也有了標(biāo)準(zhǔn),我們?cè)僬驹谶@個(gè)地方,講軟件架構(gòu)的時(shí)候,就必須符合這些國(guó)際標(biāo)準(zhǔn)。
這是一些核心的東西,理解完了這個(gè)之后,就知道了架構(gòu)風(fēng)格非常簡(jiǎn)單。它命名了哪些組件,確定了組件和組件之間的關(guān)系,這樣怎么組件之間的連接也確定了,而組件上的約束也確定下來(lái)了。于是,就一套合在一塊,取了一個(gè)詞兒叫做風(fēng)格。