在軟件開發(fā)領(lǐng)域,架構(gòu)設(shè)計無疑是非常重要的內(nèi)容。中培偉業(yè)《軟件系統(tǒng)詳細(xì)設(shè)計最佳實踐》培訓(xùn)專家龔老師指出,架構(gòu)應(yīng)該包括了功能性架構(gòu)和非功能性架構(gòu)兩個方面的內(nèi)容。我們常說的J2EE,DotNet標(biāo)準(zhǔn)架構(gòu)框架更多的是非功能性架構(gòu)的范疇;而談的子系統(tǒng),組件劃分,接口設(shè)計,復(fù)用等內(nèi)容涉及到功能性架構(gòu)的內(nèi)容。J2EE架構(gòu)的標(biāo)準(zhǔn)模板很容易找到和借用,但是并不代表你是一個合格的架構(gòu)師,架構(gòu)師必須深入到功能性架構(gòu)中,真正的做好需求和實現(xiàn)中間的橋梁。
龔老師認(rèn)為,從靜態(tài)分析的角度來考慮,架構(gòu)的核心即是分解和集成。我們面對的現(xiàn)實業(yè)務(wù)和需求可能太龐大了,如果不去分解我們的構(gòu)建根本都無法下手,我們就無法真正理解業(yè)務(wù)細(xì)節(jié)。因此子系統(tǒng)和組件劃分是分解重要內(nèi)容,分解重要原則又是高內(nèi)聚,松耦合。
由于分解產(chǎn)生了組件間的交互,因此需要根據(jù)關(guān)注接口的分析和設(shè)計,架構(gòu)師的一個關(guān)鍵職能就是要屏蔽系統(tǒng)本身復(fù)雜性,將復(fù)雜性作為一個黑盒控制在自己手里,對外只需要暴露盡可能簡單的接口。而在分解的時候又必須要考慮集成,架構(gòu)師在自己腦海里面已經(jīng)有了目標(biāo)系統(tǒng)的樣子,他們會很有信心分解的組件能夠通過當(dāng)初定義的接口很好的集成在一起。正如汽車制造一樣,所有的零備件都出來了卻發(fā)現(xiàn)它們根本無法組裝成一臺汽車,這對架構(gòu)師是最大的悲哀。系統(tǒng)都還沒有出來,而架構(gòu)師就能夠游刃有余的做這些事情,靠的不僅僅是多年的設(shè)計和開發(fā)實踐,更多的則是在實踐過程中的抽象思維和模式總結(jié)。
從動態(tài)分析的角度來考慮,現(xiàn)實世界中的原始需求進(jìn)入,最終出來的則是滿足需求的功能實現(xiàn),在這個過程中涉及到一系列的內(nèi)部程序流轉(zhuǎn)流程,前臺界面,業(yè)務(wù)邏輯,數(shù)據(jù)訪問,數(shù)據(jù)實體,公用組件等,這些層次之間應(yīng)該怎樣去交互是在架構(gòu)設(shè)計中必須要考慮清楚的問題。在這方面我喜歡用架構(gòu)機制這個詞語,機制往往并不是靜態(tài)詞匯,因為要深究機制就必須要搞清楚事件觸發(fā),功能調(diào)用,訪問順序等一系列問題。簡單的講,架構(gòu)機制要回答一個重要的問題,即你設(shè)計出的分布式框架如何能夠滿足輸入的需求變成最終輸出的功能,中間究竟經(jīng)歷了哪些步驟?安全性如何保證?性能如何保證?可擴(kuò)展性又如何保證?要回答這些問題你都必須給出這些問題的解決方案的運行機制,而只有大家認(rèn)可了運行機制,或者新出來的模塊已經(jīng)在新架構(gòu)上運行驗證了,才能夠講從架構(gòu)框架上基本上已經(jīng)成熟了。
架構(gòu)本身不是目標(biāo),而簡單實用并且支持靈活擴(kuò)展的系統(tǒng)才是我們追求的目標(biāo)。架構(gòu)師思維意識里面更加重要的是實用性和經(jīng)濟(jì)性而非理想化,由于業(yè)務(wù)域和問題域的不同沒有完全可以照搬的架構(gòu),在架構(gòu)設(shè)計上追求一定的可擴(kuò)展性,要杜絕過度架構(gòu)和架構(gòu)理想化的問題。就如何建造一個建筑,如果我們最終得不到一個實用的的建筑物,你再怎么向客戶吹噓你的設(shè)計圖紙和建造框架如何合理都是徒勞的。