
50
那,具體來說,什么是風(fēng)格?
風(fēng)格在這里指的是,一個(gè)代表了業(yè)務(wù)組件,它們之間的連接,它們之間的產(chǎn)品上的約束,這樣的一個(gè)集合,這就是風(fēng)格。
架構(gòu)的風(fēng)格,就是一種架構(gòu)的模式,而架構(gòu)模式和架構(gòu)風(fēng)格成了最重要的區(qū)別,架構(gòu)風(fēng)格解決的是一類問題,而模式解決的是一個(gè)具體的問題。
比如,一個(gè)企業(yè)發(fā)展,有兩個(gè)風(fēng)格,一個(gè)是貿(mào)工技,一個(gè)技工貿(mào),你們來想想,這跟真正的企業(yè)經(jīng)營有沒有聯(lián)系緊,技工貿(mào),貿(mào)工技,它的抽象度非常高的,而它并沒有說具體的經(jīng)營什么產(chǎn)品,以及怎么經(jīng)營的,它只是說了一個(gè)貿(mào)工技還是貿(mào)工技,包括一個(gè)企業(yè)怎么應(yīng)用規(guī)?;?,我們只是說了多元化和國際化。所以這個(gè)是比較籠統(tǒng)的,這樣來說,你有沒有理解架構(gòu)風(fēng)格是如何確定的?
這也只是相對(duì)來說,是一個(gè)問題的解決方案,但是,是一類問題的一個(gè)更加宏觀的解決方案。架構(gòu)風(fēng)格的定義,包括面向模式的軟件架構(gòu)里面,也是對(duì)架構(gòu)風(fēng)格做了一個(gè)定義。
Architectural Style By Frank Bushchmann
An architectural style expresses a fundamental structural organization schema for software system.
It provides a set of predefined element types, specifies their responsibilities, and includes rulesand guidelines for organizing the relationships between them.
The key point about an architectural style is that it provides a set of organizational principles for the system as s whole, rather than for the details of one piece of the system. The solution described by an architectural style is usually defined in terms of types of architectural elements and their interfaces, types of connectors, and constraints on how the elements and connectors should be combined.
架構(gòu)風(fēng)格表示軟件系統(tǒng)的基本結(jié)構(gòu)組織架構(gòu)。
它提供一組預(yù)定義的元素類型, 指定它們的職責(zé), 并包括用于組織它們之間關(guān)系的規(guī)則和準(zhǔn)則。
體系結(jié)構(gòu)風(fēng)格的關(guān)鍵點(diǎn)在于它為系統(tǒng)提供了一整套的組織原則, 而不是系統(tǒng)的一部分細(xì)節(jié)。體系結(jié)構(gòu)樣式所描述的解決方案通常是根據(jù)體系結(jié)構(gòu)元素的類型及其接口、連接器類型以及如何組合元素和連接器的約束來定義的。
這樣的定義,是從架構(gòu)模式的角度來定義了架構(gòu)風(fēng)格,就是說架構(gòu)風(fēng)格,首先是一種架構(gòu)模式,現(xiàn)在我們把它建立這個(gè)關(guān)系,認(rèn)為風(fēng)格是一種架構(gòu)模式。
51
那,這該如何表達(dá)的,表達(dá)的又是什么呢?
這里表達(dá)的是,軟件系統(tǒng)的一個(gè)基本的結(jié)構(gòu)性的組織計(jì)劃。實(shí)際上它是一種計(jì)劃,所以風(fēng)格是什么?
風(fēng)格表達(dá)的是一個(gè)軟件系統(tǒng)的,一個(gè)根本的結(jié)構(gòu),組織的一個(gè)計(jì)劃。組織計(jì)劃,每個(gè)風(fēng)格里面提供了元素的類型,元素的職責(zé),以及它們的規(guī)則和指導(dǎo)原則,這就是架構(gòu)的風(fēng)格。
那,一個(gè)架構(gòu)風(fēng)格的要點(diǎn)是什么?
它提供的是作為一個(gè)整體系統(tǒng)的組織原則,一套組織原則。所以說,架構(gòu)風(fēng)格,一定是系統(tǒng)原則,組織原則,它是跟整個(gè)系統(tǒng)連在一起的,而設(shè)計(jì)是跟一個(gè)具體的子系統(tǒng)連在一起的,它不是跟作為一個(gè)整體的系統(tǒng)連在一起的,所以這個(gè)規(guī)則(law)是不一樣的,設(shè)計(jì)它關(guān)注的不是一個(gè)系統(tǒng)的方面。
用一個(gè)架構(gòu)風(fēng)格描述,通常是根據(jù)的架構(gòu)元素,它們的接口聯(lián)系的類型,定義這些鬼東西的本質(zhì)上,還是因?yàn)榧軜?gòu)本身并沒有真正的國際標(biāo)準(zhǔn),所以,架構(gòu)這個(gè)詞就是一個(gè)仁者見仁,智者見智的定義。
52
在UML2.0里面的架構(gòu),架構(gòu)的定義就比較簡單可操作了。
UML 用戶指南2.0中的架構(gòu)定義
Architecture is the set of significant decisions about:
The organization of a software system.
The selection of the structural elements and their interfaces by which thesystem is composed.
Their behavior, as specified in the collaborations among those elements.
The composition of these structural and behavioral elements into progressively larger subsystems.
The architectural style that guides this organization: the static and dynamic elements and their interfaces, their collaborations, and their compostion.
?
體系結(jié)構(gòu)是有關(guān)以下各項(xiàng)的重要決策的集合:
軟件系統(tǒng)的組織。
系統(tǒng)組成的結(jié)構(gòu)元素及其接口的選擇。
他們的行為, 在這些元素之間的協(xié)作中指定。
這些結(jié)構(gòu)和行為元素組成的漸進(jìn)較大的子系統(tǒng)。
指導(dǎo)本組織的體系結(jié)構(gòu)樣式: 靜態(tài)和動(dòng)態(tài)元素及其接口、它們的協(xié)作以及它們的組成。
?Software architecture isnot only concerned with structure and behavior, but also with usage,functionality, performance, resilience, reuse, comprehensibility, economic and technology constraints and trade-offs, and aesthetic concerns.
軟件體系結(jié)構(gòu)不僅與結(jié)構(gòu)和行為有關(guān), 而且與使用、功能、性能、復(fù)原力、重用、可理解性、經(jīng)濟(jì)和技術(shù)約束和權(quán)衡以及審美關(guān)注有關(guān)。
這樣,說的就比較具體了,剛才那些說的比較籠統(tǒng)的。這個(gè)是怎么定義的?
它是說,架構(gòu)是,重要決策的集合,決策重要階段,包括結(jié)構(gòu)里面選擇哪些元素,每個(gè)元素有什么結(jié)構(gòu),說白了就是元素的外部可見特性,這個(gè)結(jié)構(gòu)是廣義的接口,廣義的概念。
53
這些結(jié)構(gòu)元素是怎么協(xié)作的,就是通過圖有結(jié)構(gòu)元素,所有的東西都放到包里面去了。元素要定義好它的外部特性,這些不同包里面的元素,怎么協(xié)作產(chǎn)生一個(gè)行為,通過它的概念模型,就可以來描述?;蛘哒f,有個(gè)包,這個(gè)包里面有很多的元素,搞清楚它的外部可能性。類是一個(gè)抽象,搞清它能干什么和如何來交互協(xié)作。
首先一個(gè)用例,所表現(xiàn)的行為除了這些之外,還有一個(gè)怎么樣把這些元素,合起來組成一個(gè)更大的系統(tǒng)。比如一個(gè)企業(yè)的組織結(jié)構(gòu),原來是在一起的,現(xiàn)在準(zhǔn)備把這五家子公司在朝著更大的方向去整合,某種意義上整合到一家公司,那你總是從一些小系統(tǒng),慢慢整成一個(gè)更大的系統(tǒng),這樣的話,它的結(jié)構(gòu)越來越清晰。最后就涉及到架構(gòu)的風(fēng)格,這是一個(gè)非常重要的一個(gè)詞,架構(gòu)的風(fēng)格。
下面它要關(guān)注的事情,就是軟件的架構(gòu),也關(guān)注它的質(zhì)量指標(biāo),包括它的美學(xué)等,這些都是屬于架構(gòu)里面要關(guān)注的。
所以說要糾正一個(gè)觀念,不要一提到架構(gòu),就以為它就是個(gè)結(jié)構(gòu),這樣想就完了,架構(gòu)它不但有結(jié)構(gòu),它還有行為,還有風(fēng)格,還有一堆有關(guān)它的質(zhì)量指標(biāo)。
54
這樣就比較容易理解了,當(dāng)然了,通過我的盡可能的表達(dá),但是理解起來還是比較復(fù)雜的,這并不是用定義的方式可以解決的,那,我再企圖給出最終正式的定義,最終的架構(gòu)的定義是什么?
Architecture——fundamental conception of a system in its environment embodied in its elements, their relationships to each other and to its environments, and the principles guidingits design and evolution.
架構(gòu)——一個(gè)系統(tǒng)的基本概念, 它的環(huán)境體現(xiàn)在其要素、相互關(guān)系及其環(huán)境中, 以及指導(dǎo)其設(shè)計(jì)和演變的原則。
這個(gè)定義是國際標(biāo)準(zhǔn)的定義,就是把架構(gòu)給它標(biāo)準(zhǔn)化了,因此,架構(gòu)是一個(gè)系統(tǒng)基本的設(shè)想,這個(gè)系統(tǒng)一定會(huì)在一個(gè)環(huán)境里面,或者在一個(gè)語境里面的系統(tǒng)的基礎(chǔ)的設(shè)想,或者一個(gè)根本的設(shè)想。
架構(gòu)體現(xiàn)了一個(gè)系統(tǒng)里面的元素,以及這個(gè)系統(tǒng)里面元素之間的關(guān)系,以及這個(gè)系統(tǒng)里面的元素跟它環(huán)境之間的關(guān)系,還有指導(dǎo)這個(gè)系統(tǒng)的設(shè)計(jì)和演化的一些指導(dǎo)原則。
所以,現(xiàn)在我們應(yīng)該看到,為什么要去講設(shè)計(jì)原理或者講設(shè)計(jì)原則,因?yàn)檫@是屬于架構(gòu)的內(nèi)容。
知道了這個(gè)概念之后,我們現(xiàn)在來開始推理,我先提一個(gè)怪怪的問題,架構(gòu)能不能看得見?架構(gòu)可以開得見嗎?
我想大家可能都學(xué)過物理,但是我們來回憶一下,我們當(dāng)時(shí)學(xué)物理的時(shí)候,學(xué)磁場(chǎng)這個(gè)概念的時(shí)候,能不能看得見場(chǎng)能?就是說我們,弄個(gè)磁鐵來放在上面,形成那個(gè)東西,比如,我們體會(huì)到了,什么磁角磁力線這些概念,但這些概念等于磁場(chǎng)嗎?
這肯定是不等于的。同理,現(xiàn)在我們用這樣的概念來推理。架構(gòu)看得見,還是看不見?
也是看不見的,這就跟磁場(chǎng)不能看得見是一樣的道理。
55
既然看不見,那架構(gòu)的描述是什么?
架構(gòu)和架構(gòu)的描述這是兩個(gè)不同的概念。一個(gè)是內(nèi)容,一個(gè)是表示。所以說一個(gè)重要的概念產(chǎn)生了。架構(gòu)實(shí)際上是一個(gè)看不見的東西,是一個(gè)設(shè)想。當(dāng)你把它弄下來的時(shí)候,是一個(gè)架構(gòu)的描述,而架構(gòu)的描述不一定就是那個(gè)架構(gòu)本身,是吧?
你描述的不是人家在里面的架構(gòu),所以,這就是我們對(duì)架構(gòu)的重要理解,架構(gòu)是一種設(shè)想,但是這個(gè)設(shè)想里面包括一堆元素,核心的概念就是,這里面的元素一定是架構(gòu)級(jí)別的元素。
因?yàn)槲覀冎罌Q策也有非架構(gòu)級(jí)別的決策,比如這個(gè)元素指的是屬性,做一個(gè)手機(jī)要考慮形狀,這也是個(gè)決策。但是這些不是架構(gòu)決策,所以,當(dāng)我們談架構(gòu)的時(shí)候,這里面的元素一定都是架構(gòu)級(jí)別的元素。說的通俗點(diǎn),一般的都是總經(jīng)理副總級(jí)別的人,他們這些人關(guān)心的元素,這些元素在企業(yè)里面是架構(gòu)級(jí)的元素,這是從更高層的角度來看的。
架構(gòu)內(nèi)部的關(guān)系,包括自身的關(guān)系以及跟環(huán)境的關(guān)系,還有指導(dǎo)它們后面那些元素設(shè)計(jì)的一些指導(dǎo)原則,設(shè)計(jì)和演化的一些指導(dǎo)原則。
所以,這樣我們就理解了,架構(gòu)是不可見的,可見的是架構(gòu)的描述。
其實(shí)啊,哲學(xué)也是類似的,聽上去看上去,是很玄很空很虛,是很難表達(dá)的,但是,你又不能說不需要哲學(xué),更不能說哲學(xué)是沒用的,它還是可以表達(dá)很多高深的問題。這是因?yàn)椋軐W(xué)的思維方式就是它本身就是這樣的思維方式,造成的。
因此,我們平常人,一定要經(jīng)過訓(xùn)練,才能說自己對(duì)哲學(xué)有一點(diǎn)點(diǎn)感覺了,語言這個(gè)東西,在面臨復(fù)雜的情況時(shí),是很難表達(dá)清楚的,而哲學(xué)語言的厲害之處,它能表達(dá)清楚,雖然看上去有點(diǎn)虛,因?yàn)樗褂昧舜罅康母拍?,而一個(gè)哲學(xué)家的厲害之處,就在于他使用這些概念把某些問題,真能從邏輯上表達(dá)得非常清楚。
能通過邏輯,清楚的表達(dá)自己的思想,還能讓別人理解你的這種表達(dá),這確實(shí)是一項(xiàng)很強(qiáng)的能力,也是值得一個(gè)人一輩子不斷的追求下去的。