溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

明晰軟件架構(gòu)與數(shù)據(jù)結(jié)構(gòu)

發(fā)布時(shí)間:2020-06-20 14:01:16 來源:網(wǎng)絡(luò) 閱讀:3112 作者:李云 欄目:軟件技術(shù)
相信大多軟件工程師在談及軟件架構(gòu)(software architecture)時(shí)立刻會(huì)聯(lián)想到數(shù)據(jù)結(jié)構(gòu)(data structure),這是正常的反應(yīng)。但是,有些工程師卻誤以為軟件架構(gòu)就完全是關(guān)于數(shù)據(jù)結(jié)構(gòu),這就不對(duì)了。之所以將軟件架構(gòu)與數(shù)據(jù)結(jié)構(gòu)在本文中并提討論,是為了讓我們對(duì)之有更清晰的認(rèn)識(shí)。讀者后面會(huì)明白,這種清晰的認(rèn)識(shí)對(duì)于我們的工作是有益的。
 
數(shù)據(jù)結(jié)構(gòu)在Wikipedia上的定義是:為了有效使用數(shù)據(jù)而在計(jì)算機(jī)中存儲(chǔ)和組織數(shù)據(jù)的特定方法。這一定義說明了為什么我們又稱之為算法。同樣是在Wikipedia上,我們能找到對(duì)于軟件架構(gòu)的定義:一個(gè)系統(tǒng)所需結(jié)構(gòu)的集合,包括軟件元素(element)、元素間的關(guān)系和屬性。定義中的“元素”是一個(gè)很寬泛的稱呼,即可以指軟件組件(component),也可以指一個(gè)獨(dú)立的子設(shè)備。

單從定義來看,軟件架構(gòu)與數(shù)據(jù)結(jié)構(gòu)具有不同的抽象層次,前者更放眼于功能,后者更著力于效率。為了讀者能更好地理解這種層次之別,讓我們以軟件開發(fā)流程中的兩個(gè)關(guān)鍵步驟為例加以說明。軟件開發(fā)的設(shè)計(jì)階段存在概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)兩大步驟,概要設(shè)計(jì)應(yīng)重點(diǎn)闡述軟件架構(gòu),而詳細(xì)設(shè)計(jì)應(yīng)著力于解釋數(shù)據(jù)結(jié)構(gòu)。我們都知道,在開發(fā)過程中概要設(shè)計(jì)先于詳細(xì)設(shè)計(jì),因而可以推測(cè)出軟件架構(gòu)處于更高的抽象層次。我看到過不少軟件概要設(shè)計(jì)文檔一上來就講數(shù)據(jù)結(jié)構(gòu),這是文檔的作者對(duì)于軟件架構(gòu)與數(shù)據(jù)結(jié)構(gòu)沒有加以明晰的緣故。

做軟件設(shè)計(jì)首當(dāng)其沖的不是數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì),而是架構(gòu)設(shè)計(jì),這一點(diǎn)無論怎樣規(guī)模的軟件都正確。架構(gòu)設(shè)計(jì)強(qiáng)調(diào)的是設(shè)計(jì)概念(我有時(shí)也稱之為模型),即軟件“長(zhǎng)什么樣”。對(duì)于實(shí)現(xiàn)同樣功能的軟件模塊,在有概念和沒有概念時(shí)所設(shè)計(jì)出來的數(shù)據(jù)結(jié)構(gòu)會(huì)很不一樣。即使采用的算法相同,但命名很有可能不同,且有概念的命名更具可讀性。因此,“先架構(gòu)后結(jié)構(gòu)”的方法,有助于寫出更具可維護(hù)性的代碼。現(xiàn)實(shí)中,之所以存在大量難以維護(hù)的代碼,正是因?yàn)樵O(shè)計(jì)者省去了概念塑造這一步驟。

另一點(diǎn)需要指出的是,軟件架構(gòu)設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)對(duì)工程師的能力要求并不完全相同。軟件架構(gòu)設(shè)計(jì)需要更多的是概念能力,即將細(xì)節(jié)進(jìn)行一定的抽象和概括的能力。數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)所需的能力卻是對(duì)于計(jì)算機(jī)體系結(jié)構(gòu)、編程語言和各種算法的掌握。

分清軟件架構(gòu)與數(shù)據(jù)結(jié)構(gòu)的意義在于:
1) 方便溝通。不至于他人在說軟件架構(gòu)時(shí),我們卻只想著數(shù)據(jù)結(jié)構(gòu)。
2) 明白架構(gòu)設(shè)計(jì)的重要性。架構(gòu)設(shè)計(jì)用于引導(dǎo)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì),數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)是用來表達(dá)架構(gòu)的。
3) 理解架構(gòu)設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)所需的能力之別,而不至于認(rèn)為“數(shù)據(jù)結(jié)構(gòu)是軟件的一切”。
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI