軟件設(shè)計(jì)的風(fēng)格
1
風(fēng)格對(duì)于軟件系統(tǒng),猶如文化對(duì)于人類(lèi)社會(huì),對(duì)于組成系統(tǒng)的各個(gè)要素(無(wú)論模塊、組件、對(duì)象還是函數(shù)),都會(huì)施加影響,只要是在運(yùn)用該風(fēng)格的邊界范圍之內(nèi)。
這種風(fēng)格影響如文化烙印一般,體現(xiàn)出一種強(qiáng)烈的一致性。當(dāng)然,一旦選錯(cuò)了風(fēng)格,那就好像17世紀(jì)中,五月花的落魄船員們闖入了印第安人的部落,可能會(huì)是混亂、風(fēng)格的格格不入。
2
Roy Fielding對(duì)風(fēng)格的定義為:
“風(fēng)格是一種用來(lái)對(duì)架構(gòu)進(jìn)行分類(lèi)和定義它們的公共特征的機(jī)制。每一種風(fēng)格都為組件的交互提供了一種抽象,并且通過(guò)忽 略架構(gòu)中其余部分的偶然性細(xì)節(jié)來(lái)捕獲一種交互模式(pattern of interation)的本質(zhì)特征。” |
這個(gè)定義有兩個(gè)關(guān)鍵詞:
- 分類(lèi)
- 共同特征
這兩個(gè)關(guān)鍵詞皆與抽象有關(guān)。
同時(shí),這句話(huà)還提及了風(fēng)格與協(xié)作之間的關(guān)系,即它是對(duì)協(xié)作的抽象。架構(gòu)風(fēng)格應(yīng)不涉及詳細(xì)設(shè)計(jì)細(xì)節(jié),需要找出那些穩(wěn)定不變的本質(zhì)特征,且這個(gè)特征是與系統(tǒng)的目標(biāo)與需求是相匹配的。
3
Roy Fielding在論文《架構(gòu)風(fēng)格與基于網(wǎng)絡(luò)的軟件架構(gòu)設(shè)計(jì)》中寫(xiě)道:
網(wǎng)絡(luò)研究則恰恰相反,集中于系統(tǒng)之間普通的通信行為的細(xì)節(jié)和提高特殊通信技術(shù)的性能,卻常常忽略了一個(gè)事實(shí),即改變一個(gè)應(yīng)用的交互風(fēng)格對(duì)于性能產(chǎn)生的影響要比改變交互所使用的通信協(xié)議更大。 |
這事實(shí)上體現(xiàn)了宏觀架構(gòu)與微觀架構(gòu)之間的關(guān)系,二者應(yīng)該保持一致。當(dāng)然,宏觀架構(gòu)的影響是戰(zhàn)略的影響,微觀架構(gòu)的影響是戰(zhàn)術(shù)的影響,在分而治之的架構(gòu)原則下,微觀架構(gòu)產(chǎn)生的影響雖然存在,但影響主要還是發(fā)生在局部。
4
畫(huà)出自己的邊界線,在邊界之內(nèi)保證風(fēng)格的一致性。邊界外,看待風(fēng)格的一致性又有另外的標(biāo)準(zhǔn)。
風(fēng)格對(duì)設(shè)計(jì)起指導(dǎo)作用,并由此驅(qū)動(dòng)對(duì)一系列架構(gòu)屬性的滿(mǎn)足。架構(gòu)屬性還包括對(duì)架構(gòu)的約束,這些約束一方面能夠?qū)υO(shè)計(jì)與實(shí)現(xiàn)進(jìn)行規(guī)范,另一方面也可以減少選擇項(xiàng),讓設(shè)計(jì)變得更為簡(jiǎn)單。
5
一種架構(gòu)風(fēng)格是一組協(xié)作的架構(gòu)約束,以及在任何一個(gè)遵循該風(fēng)格的架構(gòu)中允許存在的元素之間的關(guān)系。 |
將風(fēng)格視為約束是合理的,但約束更像是對(duì)一個(gè)封閉的大的集合中的裁剪,規(guī)定你不能做什么。風(fēng)格不僅要規(guī)定你不能做什么,還要告訴你應(yīng)該做什么,它要處理的是一個(gè)開(kāi)放的大的空間,我們需要找到該空間內(nèi)和諧的內(nèi)容,并把不和諧的部分剔除出去。剔除出去的這部分內(nèi)容其實(shí)就是違背了架構(gòu)約束的內(nèi)容。
架構(gòu)風(fēng)格強(qiáng)調(diào)的是軟件架構(gòu)的不同方面,一種特定的架構(gòu)可能有多種架構(gòu)風(fēng)格組成。這就體現(xiàn)了架構(gòu)風(fēng)格是有層次的。
為了保證架構(gòu)的一致性,需要在整體層面體現(xiàn)為統(tǒng)一的架構(gòu)風(fēng)格,而在不同邊界內(nèi),展現(xiàn)另外的架構(gòu)風(fēng)格。換言之,這種風(fēng)格的多樣性與隔離性,以及風(fēng)格的層次其實(shí)是與架構(gòu)的層次相對(duì)應(yīng)的。
6
對(duì)于設(shè)計(jì)風(fēng)格而言,除了要保證風(fēng)格的一致性外,關(guān)鍵的是要找到一種與正在解決的問(wèn)題最為匹配的風(fēng)格。
要了解自己需要解決的問(wèn)題,同時(shí)還要了解不同的架構(gòu)風(fēng)格的特征與優(yōu)缺點(diǎn),清楚地知道這些架構(gòu)風(fēng)格究竟適合處理哪種場(chǎng)景。
【本文為51CTO專(zhuān)欄作者“張逸”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】