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