架構(gòu)設(shè)計(jì)這個(gè)詞聽的非常的多,但真正何謂架構(gòu)設(shè)計(jì)呢??可能要你真的來講還真的講不太清楚,很多人都知道架構(gòu)設(shè)計(jì)是對(duì)系統(tǒng)進(jìn)行分層、分模塊進(jìn)行設(shè)計(jì),但又有多少人知道這步應(yīng)該怎么去做呢,往往很多的programmer在剛進(jìn)入架構(gòu)設(shè)計(jì)這個(gè)領(lǐng)域的時(shí)候,受到以前做模塊的那種影響,把自己的眼光限定到了具體的模塊實(shí)現(xiàn)上去了,并沒有站在系統(tǒng)的高度上來把握系統(tǒng)的架構(gòu),這都是些理論性的話,來講點(diǎn)實(shí)際的,^_^,具體架構(gòu)設(shè)計(jì)指的是什么呢?目的是什么呢?如何去做呢?下面來講講我的體會(huì):
架構(gòu)設(shè)計(jì)指的是站在系統(tǒng)的高度上根據(jù)需求分析對(duì)整體系統(tǒng)進(jìn)行把握,包括對(duì)于系統(tǒng)運(yùn)行體系、系統(tǒng)擴(kuò)展性、靈活性、性能、部署環(huán)境等方面的考慮。
目的的話就象上面說的,對(duì)系統(tǒng)進(jìn)行分層、分模塊,并為將來技術(shù)性模塊、功能模塊的實(shí)現(xiàn)提供設(shè)計(jì)指導(dǎo),部署指導(dǎo)。
做法的話我覺得基本是一個(gè)這么樣的步驟:
1、根據(jù)需求分析產(chǎn)生的問題域形成系統(tǒng)的結(jié)構(gòu)體系(C/S、B/S或其他的),這部分重要的是根據(jù)需求提出最適合的結(jié)構(gòu)體系。
2、根據(jù)結(jié)構(gòu)體系結(jié)合設(shè)計(jì)思想(分層思想、職責(zé)單一)以及可靠性等進(jìn)行系統(tǒng)的分層設(shè)計(jì),如對(duì)B/S結(jié)構(gòu)采用MVC思想進(jìn)行分層,產(chǎn)生View--->Controller---->Action---->Domain Model---->Persistent五層,闡明各層次的職責(zé),并闡述如何實(shí)現(xiàn)這個(gè)層次的運(yùn)行環(huán)境,層次內(nèi)分為了哪些模塊或框架來支撐整個(gè)層次是可運(yùn)行的,這是架構(gòu)設(shè)計(jì)中的重點(diǎn),也就是說為,同時(shí)根據(jù)需求分析產(chǎn)生的問題域中共性的部分進(jìn)行抽象,形成框架,并相應(yīng)的放入上述的層次中,如問題域中共同有對(duì)于權(quán)限的需求或者說大部分有這個(gè)需求,就抽象構(gòu)成一個(gè)權(quán)限模塊放入Domain Model中,經(jīng)過這個(gè)過程系統(tǒng)的架構(gòu)圖就得以產(chǎn)生了,架構(gòu)圖體現(xiàn)的是功能模塊的運(yùn)行場(chǎng)所的實(shí)現(xiàn)方案,它做到的依據(jù)此架構(gòu)產(chǎn)生的系統(tǒng)可以支撐目前系統(tǒng)功能模塊的運(yùn)行與需求的實(shí)現(xiàn),同時(shí)在此時(shí)需要考慮到系統(tǒng)的擴(kuò)展方式、性能的考慮。
3、根據(jù)上面的架構(gòu)圖同時(shí)也可產(chǎn)生系統(tǒng)的物理部署圖,部署圖主要表明了今后系統(tǒng)的部署方式,物理方面的部署要求。
4、根據(jù)架構(gòu)圖產(chǎn)生系統(tǒng)的模塊視圖,這個(gè)圖表明了在架構(gòu)之上運(yùn)行的系統(tǒng)的功能模塊。
5、根據(jù)模塊視圖產(chǎn)生系統(tǒng)的模塊依賴視圖,這個(gè)圖主要闡明系統(tǒng)間模塊的依賴關(guān)系。
6、根據(jù)模塊職責(zé)以及模塊依賴視圖就產(chǎn)生了模塊的接口,對(duì)接口進(jìn)行詳細(xì)的設(shè)計(jì)并提供偽代碼。
經(jīng)過這些步驟后,基本上可以說一個(gè)系統(tǒng)的架構(gòu)設(shè)計(jì)就做好了,接下來就可以對(duì)其中的框架采取的技術(shù)進(jìn)行Spike或者說預(yù)研,當(dāng)然,最好是采取自己熟悉的技術(shù)體系,按照這個(gè)技術(shù)體系對(duì)架構(gòu)進(jìn)行驗(yàn)證,之后就可以進(jìn)行概要設(shè)計(jì)了,關(guān)于概要設(shè)計(jì)的部分下次再說。
個(gè)人理解,架構(gòu)設(shè)計(jì)簡(jiǎn)單的來說就是根據(jù)對(duì)需求產(chǎn)生的問題域進(jìn)行分析產(chǎn)生可供系統(tǒng)功能模塊運(yùn)行的一個(gè)體系結(jié)構(gòu),相當(dāng)于提供功能模塊運(yùn)行容器的設(shè)計(jì)。說起來基本就是這樣的,但做起來就難了,想想如何進(jìn)行分層設(shè)計(jì),如何對(duì)層次內(nèi)的運(yùn)行模塊進(jìn)行劃分以支撐整個(gè)體系結(jié)構(gòu)的順利運(yùn)轉(zhuǎn),就拿B/S結(jié)構(gòu)的層次來說,上面的5層結(jié)構(gòu)很多人都采用,但在具體的做法上有很多的不同,質(zhì)量、性能、擴(kuò)展性上也有很多的不同,這些在架構(gòu)設(shè)計(jì)中都是體現(xiàn)出來了的,根據(jù)架構(gòu)設(shè)計(jì)之后的功能模塊就完全可以按照架構(gòu)圖將自己進(jìn)行相應(yīng)的層次劃分并放入里面,至于如何運(yùn)行就交給這個(gè)容器好了,架構(gòu)設(shè)計(jì)就是幫你做好這件事的。
當(dāng)然,其實(shí)真正做架構(gòu)設(shè)計(jì)時(shí)比這復(fù)雜多了,想想外國(guó)佬基本都是沉浸在軟件界10多年甚至幾十年的架構(gòu)師,那些才能稱的上稱職,作為一個(gè)架構(gòu)師需要有足夠的遠(yuǎn)見和預(yù)知能力,保證系統(tǒng)的穩(wěn)定和高效這可不是說做就能做到的,需要有豐富的經(jīng)驗(yàn)。
個(gè)人對(duì)于架構(gòu)設(shè)計(jì)的一些淺薄的理解,還望各位進(jìn)行指正。