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