明晰软件架构与数据结构
生活随笔
收集整理的這篇文章主要介紹了
明晰软件架构与数据结构
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
相信大多軟件工程師在談及軟件架構(software architecture)時立刻會聯想到數據結構(data structure),這是正常的反應。但是,有些工程師卻誤以為軟件架構就完全是關于數據結構,這就不對了。之所以將軟件架構與數據結構在本文中并提討論,是為了讓我們對之有更清晰的認識。讀者后面會明白,這種清晰的認識對于我們的工作是有益的。 數據結構在Wikipedia上的定義是:為了有效使用數據而在計算機中存儲和組織數據的特定方法。這一定義說明了為什么我們又稱之為算法。同樣是在Wikipedia上,我們能找到對于軟件架構的定義:一個系統所需結構的集合,包括軟件元素(element)、元素間的關系和屬性。定義中的“元素”是一個很寬泛的稱呼,即可以指軟件組件(component),也可以指一個獨立的子設備。
單從定義來看,軟件架構與數據結構具有不同的抽象層次,前者更放眼于功能,后者更著力于效率。為了讀者能更好地理解這種層次之別,讓我們以軟件開發流程中的兩個關鍵步驟為例加以說明。軟件開發的設計階段存在概要設計和詳細設計兩大步驟,概要設計應重點闡述軟件架構,而詳細設計應著力于解釋數據結構。我們都知道,在開發過程中概要設計先于詳細設計,因而可以推測出軟件架構處于更高的抽象層次。我看到過不少軟件概要設計文檔一上來就講數據結構,這是文檔的作者對于軟件架構與數據結構沒有加以明晰的緣故。
做軟件設計首當其沖的不是數據結構設計,而是架構設計,這一點無論怎樣規模的軟件都正確。架構設計強調的是設計概念(我有時也稱之為模型),即軟件“長什么樣”。對于實現同樣功能的軟件模塊,在有概念和沒有概念時所設計出來的數據結構會很不一樣。即使采用的算法相同,但命名很有可能不同,且有概念的命名更具可讀性。因此,“先架構后結構”的方法,有助于寫出更具可維護性的代碼。現實中,之所以存在大量難以維護的代碼,正是因為設計者省去了概念塑造這一步驟。
另一點需要指出的是,軟件架構設計與數據結構設計對工程師的能力要求并不完全相同。軟件架構設計需要更多的是概念能力,即將細節進行一定的抽象和概括的能力。數據結構設計所需的能力卻是對于計算機體系結構、編程語言和各種算法的掌握。
分清軟件架構與數據結構的意義在于: 1) 方便溝通。不至于他人在說軟件架構時,我們卻只想著數據結構。 2) 明白架構設計的重要性。架構設計用于引導數據結構設計,數據結構設計是用來表達架構的。 3) 理解架構設計與數據結構設計所需的能力之別,而不至于認為“數據結構是軟件的一切”。
單從定義來看,軟件架構與數據結構具有不同的抽象層次,前者更放眼于功能,后者更著力于效率。為了讀者能更好地理解這種層次之別,讓我們以軟件開發流程中的兩個關鍵步驟為例加以說明。軟件開發的設計階段存在概要設計和詳細設計兩大步驟,概要設計應重點闡述軟件架構,而詳細設計應著力于解釋數據結構。我們都知道,在開發過程中概要設計先于詳細設計,因而可以推測出軟件架構處于更高的抽象層次。我看到過不少軟件概要設計文檔一上來就講數據結構,這是文檔的作者對于軟件架構與數據結構沒有加以明晰的緣故。
做軟件設計首當其沖的不是數據結構設計,而是架構設計,這一點無論怎樣規模的軟件都正確。架構設計強調的是設計概念(我有時也稱之為模型),即軟件“長什么樣”。對于實現同樣功能的軟件模塊,在有概念和沒有概念時所設計出來的數據結構會很不一樣。即使采用的算法相同,但命名很有可能不同,且有概念的命名更具可讀性。因此,“先架構后結構”的方法,有助于寫出更具可維護性的代碼。現實中,之所以存在大量難以維護的代碼,正是因為設計者省去了概念塑造這一步驟。
另一點需要指出的是,軟件架構設計與數據結構設計對工程師的能力要求并不完全相同。軟件架構設計需要更多的是概念能力,即將細節進行一定的抽象和概括的能力。數據結構設計所需的能力卻是對于計算機體系結構、編程語言和各種算法的掌握。
分清軟件架構與數據結構的意義在于: 1) 方便溝通。不至于他人在說軟件架構時,我們卻只想著數據結構。 2) 明白架構設計的重要性。架構設計用于引導數據結構設計,數據結構設計是用來表達架構的。 3) 理解架構設計與數據結構設計所需的能力之別,而不至于認為“數據結構是軟件的一切”。
總結
以上是生活随笔為你收集整理的明晰软件架构与数据结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CCNA课堂练习三:标准访问控制列表和扩
- 下一篇: vim中的 recording