相信大多軟件工程師在談及軟件架構(software architecture)時馬上會聯想到數據結構(data structure),這是正常的反應。可是,有些工程師卻誤覺得軟件架構就徹底是關於數據結構,這就不對了。之因此將軟件架構與數據結構在本文中並提討論,是爲了讓咱們對之有更清晰的認識。讀者後面會明白,這種清晰的認識對於咱們的工做是有益的。
數據結構在Wikipedia上的定義是:爲了有效使用數據而在計算機中存儲和組織數據的特定方法。這必定義說明了爲何咱們又稱之爲算法。一樣是在Wikipedia上,咱們能找到對於軟件架構的定義:一個系統所需結構的集合,包括軟件元素(element)、元素間的關係和屬性。定義中的「元素」是一個很寬泛的稱呼,便可以指軟件組件(component),也能夠指一個獨立的子設備。
單從定義來看,軟件架構與數據結構具備不一樣的抽象層次,前者更放眼於功能,後者更着力於效率。爲了讀者能更好地理解這種層次之別,讓咱們以軟件開發流程中的兩個關鍵步驟爲例加以說明。軟件開發的設計階段存在概要設計和詳細設計兩大步驟,概要設計應重點闡述軟件架構,而詳細設計應着力於解釋數據結構。咱們都知道,在開發過程當中概要設計先於詳細設計,於是能夠推測出軟件架構處於更高的抽象層次。我看到過很多軟件概要設計文檔一上來就講數據結構,這是文檔的做者對於軟件架構與數據結構沒有加以明晰的緣故。
作軟件設計首當其衝的不是數據結構設計,而是架構設計,這一點不管怎樣規模的軟件都正確。架構設計強調的是設計概念(我有時也稱之爲模型),即軟件「長什麼樣」。對於實現一樣功能的軟件模塊,在有概念和沒有概念時所設計出來的數據結構會很不同。即便採用的算法相同,但命名頗有可能不一樣,且有概念的命名更具可讀性。所以,「先架構後結構」的方法,有助於寫出更具可維護性的代碼。現實中,之因此存在大量難以維護的代碼,正是由於設計者省去了概念塑造這一步驟。
另外一點須要指出的是,軟件架構設計與數據結構設計對工程師的能力要求並不徹底相同。軟件架構設計須要更多的是概念能力,即將細節進行必定的抽象和歸納的能力。數據結構設計所需的能力倒是對於計算機體系結構、編程語言和各類算法的掌握。
分清軟件架構與數據結構的意義在於:
1) 方便溝通。不至於他人在說軟件架構時,咱們卻只想着數據結構。
2) 明白架構設計的重要性。架構設計用於引導數據結構設計,數據結構設計是用來表達架構的。
3) 理解架構設計與數據結構設計所需的能力之別,而不至於認爲「數據結構是軟件的一切」。