概述
本文從不同角度闡述什么是軟件架構(gòu),軟件架構(gòu)在做什么,在進行軟件架構(gòu)設(shè)計時需要考慮哪些方面。

基本概念
軟件系統(tǒng)的架構(gòu)就是有它的構(gòu)建者所決定的,軟件架構(gòu)這項工作的實質(zhì)就是:如何將系統(tǒng)切分成組件,并安排好組件之間的排列關(guān)系,以及組件之間的相互通信的方式。
而設(shè)計軟件架構(gòu)的目的就是:為了在工作中更好的對這些組件進行研發(fā)、部署、運行及其維護。
設(shè)計良好的架構(gòu):可以讓系統(tǒng)更容易理解、易于修改、方便維護、并能輕松部署。
軟件架構(gòu)的終極目標:最大化程序員的生產(chǎn)力,同時最小化系統(tǒng)的總運維成本。
開發(fā)
一個開發(fā)起來很困難的軟件系統(tǒng),不太可能有一個長久的長久、健康的生命周期。
系統(tǒng)架構(gòu)設(shè)計的作用,就是方便其團隊對它進行開發(fā)。
運行
設(shè)計良好的系統(tǒng)架構(gòu)應(yīng)該可以使開發(fā)人員對系統(tǒng)的運行一目了然。
架構(gòu)應(yīng)該起到揭示系統(tǒng)運行過程的作用。
系統(tǒng)架構(gòu)應(yīng)該將系統(tǒng)中的用例,功能,以及必備行為,設(shè)置為對開發(fā)者可見的一級實體,簡化他們對系統(tǒng)的理解。這將會對系統(tǒng)的開發(fā)與維護,提供極大的幫助。
部署
在設(shè)計的早期就要考慮到部署問題,
為了讓開發(fā)成為有效的工作,軟件系統(tǒng)就必須是可部署的。
通常一個系統(tǒng)的部署成本越高,可用性就越低。所以,實現(xiàn)一鍵輕松部署應(yīng)該是設(shè)計軟件架構(gòu)的一個目標。
維護
在軟件系統(tǒng)所有方面中,維護所需要的成本是最高的。需求的變更,新功能的添加,以及系統(tǒng)缺陷這些工作將會占去大部分人力資源。
系統(tǒng)維護的主要成本,包括兩個方面:
新增功能:確定新增功能或修復問題的最佳位置。
風險成本:在進行系統(tǒng)代碼修改時,可能衍生出新的問題。
通過優(yōu)良的架構(gòu)設(shè)計,可以減少維護成本:
將系統(tǒng)切分成各個組件(模塊)。
使用穩(wěn)定的接口把各個組件之間進行隔離。這樣讓各個組件之間保持正交性,各個組件之間解耦。
將未來需要添加新功能的添加方式明確出來,可以大大降低對系統(tǒng)其他部分造成的傷害的可能性。
如何提前考慮新功能的添加方式?
比如支持數(shù)據(jù)庫:可以編寫數(shù)據(jù)服務(wù)層,并設(shè)計成接口;當需要支持新的數(shù)據(jù)庫時,只需要按新的數(shù)據(jù)庫的驅(qū)動實現(xiàn)接口,其他模塊或業(yè)務(wù)上層代碼保持不變。
保持可選項:
讓軟件盡可能長時間地保留盡可能多的可選項。
所有的軟件系統(tǒng),可以分解為:策略和細節(jié);策略:軟件中的業(yè)務(wù)核心,它是系統(tǒng)真正價值所在;細節(jié):是指操作該系統(tǒng)的人,其他系統(tǒng)與策略進行交互,但又不影響策略本身的行為。
軟件架構(gòu)師的目標:創(chuàng)建一種系統(tǒng)形態(tài),以策略為基本元素,并讓細節(jié)與策略脫離關(guān)系,允許在具體決策過程中,推遲或延遲與細節(jié)相關(guān)的內(nèi)容。
比如:在開發(fā)早期,開發(fā)高層策略時,應(yīng)該無須選擇數(shù)據(jù)庫系統(tǒng),不用確定使用的web服務(wù),不用確定是否使用REST接口。就是說:軟件的高層,與這些東西沒有關(guān)系。
設(shè)備無關(guān):
不同硬件上都能直接部署,而且得到的結(jié)果是相同的。
這個原則,對軟件開發(fā)和部署非常重要。
參考書籍
該文章在 2023/3/6 16:34:17 編輯過