作者:softj
開(kāi)始之初的架構設計決定著(zhù)軟件產(chǎn)品的生死存亡。“好的開(kāi)始相當于成功一半”。
開(kāi)始的架構設計也是最難的,需要調研同類(lèi)產(chǎn)品的情況以及技術(shù)特征,了解當前世界上對這種產(chǎn)品所能提供的理論支持和技術(shù)平臺支持。再結合自己項目的特點(diǎn)(需要透徹的系統分析),才能逐步形成自己項目的架構藍圖。
比如要開(kāi)發(fā)網(wǎng)站引擎系統,就從Yahoo的個(gè)人主頁(yè)生成工具 到虛擬主機商提供的網(wǎng)站自動(dòng)生成系統,以及IBM Webphere Portal的特點(diǎn)和局限 從而從架構設計角度定立自己產(chǎn)品的位置。
好的設計肯定需要經(jīng)過(guò)反復修改,從簡(jiǎn)單到復雜的循環(huán)測試是保證設計正確的一個(gè)好辦法
由于在開(kāi)始選擇了正確的方向,后來(lái)項目的實(shí)現過(guò)程也驗證了這種選擇,但在一些架構設計的細部方面,還需要對方案進(jìn)行修改,屬于那種螺旋上升的方式,顯然這是通過(guò)測試第一的思想和XP工程方法來(lái)實(shí)現的。
如果我們開(kāi)始的架構設計在技術(shù)平臺定位具有一定的世界先進(jìn)水平,那么,項目開(kāi)發(fā)實(shí)際有一半相當于做實(shí)驗,是研發(fā),存在相當的技術(shù)風(fēng)險。
因此,一開(kāi)始我們不可能將每個(gè)需求都實(shí)現,而是采取一種簡(jiǎn)單完成架構流程的辦法,使用最簡(jiǎn)單的需求將整個(gè)架構都簡(jiǎn)單的完成一遍(加入人工干預),以檢驗各個(gè)技術(shù)環(huán)節是否能髖浜瞎ぷ?非常優(yōu)秀先進(jìn)的兩種技術(shù)有時(shí)無(wú)法在一起工作),同時(shí)也可以探知技術(shù)的深淺,掌握項目中的技術(shù)難易點(diǎn)。這個(gè)過(guò)程完成后,我們就對設計方案做出上面的重大修改,豐富完善了設計方案。
設計模式是支撐架構的重要組件
架構設計也類(lèi)似一種工作流,它是動(dòng)態(tài)的,這點(diǎn)不象建筑設計那樣,一開(kāi)始就能完全確定,架構設計伴隨著(zhù)整個(gè)項目的進(jìn)行過(guò)程之中,有兩種具體操作保證架構設計的正確完成,那就是設計模式(靜態(tài))和工程項目方法(RUP或XP 動(dòng)態(tài)的)。
設計模式是支撐架構的一種重要組件,這與建筑有很相象的地方,一個(gè)建筑物建立設計需要建筑架構設計,在具體施工中,有很多建筑方面的規則和模式。
我們從J2EE藍圖模式分類(lèi)http://java.sun.com/blueprints/patterns/catalog.html中就可以很清楚的看到J2EE這樣一個(gè)框架軟件的架構與設計模式的關(guān)系。
架構設計是骨架,設計模式就是肉
這樣,一個(gè)比較豐富的設計方案可以交由程序員進(jìn)一步完成了,載輔助以適當的工程方法,這樣就可保證項目的架構設計能正確快速的完成。
時(shí)刻牢記架構設計的目標
由于架構設計是在動(dòng)態(tài)中完成的,因此在把握架構設計的目標上就很重要,因此在整個(gè)項目過(guò)程中,甚至每一步我們都必須牢記我們架構設計的總體目標,可以概括下面幾點(diǎn):
1. 最大化的重用:這個(gè)重用包括組件重用 和設計模式使用等多個(gè)方面。
比如,我們項目中有用戶(hù)注冊和用戶(hù)權限系統驗證,這其實(shí)是個(gè)通用課題,每個(gè)項目只是有其內容和一些細微的差別,如果我們之前有這方面成功研發(fā)經(jīng)驗,可以直接重用,如果沒(méi)有,那么我們就要進(jìn)行這個(gè)子項目的研發(fā),在研發(fā)過(guò)程中,不能僅僅看到這個(gè)項目的需求,也要以架構的概念去完成這個(gè)可以稱(chēng)為組件的子項目。
2. 盡可能的簡(jiǎn)單明了:我們解決問(wèn)題的總方向是將復雜問(wèn)題簡(jiǎn)單化,其實(shí)這也是中間件或多層體系技術(shù)的根本目標。但是在具體實(shí)施設計過(guò)程中,我們可能會(huì )將簡(jiǎn)單問(wèn)題復雜化,特別是設計模式的運用上很容易范這個(gè)錯誤,因此如何盡可能的做到設計的簡(jiǎn)單明了是不容易的。
我認為落實(shí)到每個(gè)類(lèi)的具體實(shí)現上要真正能體現系統事物的本質(zhì)特征,因為事物的本質(zhì)特征只有一個(gè),你的代碼越接近它,表示你的設計就是簡(jiǎn)單明了,越簡(jiǎn)單明了,你的系統就越可靠。更多情況是,一個(gè)類(lèi)并不能反應事物本質(zhì),需要多個(gè)類(lèi)的組合協(xié)調,那么能夠正確使用合適的設計模式就稱(chēng)為重中之重。
我們看一個(gè)具備好的架構設計的系統代碼時(shí),基本看到的都是設計模式,寵物店(pet store)就是這樣的例子?;蛘呖梢赃@樣說(shuō),一個(gè)好的架構設計基本是由簡(jiǎn)單明了的多個(gè)設計模式完成的。
3. 最靈活的拓展性:架構設計要具備靈活性 拓展性,這樣,用戶(hù)可以在你的架構上進(jìn)行二次開(kāi)發(fā)或更加具體的開(kāi)發(fā)。
要具備靈活的拓展性,就要站在理論的高度去進(jìn)行架構設計,比如現在工作流概念逐步流行,因為我們具體很多實(shí)踐項目中都有工作流的影子,工作流中有一個(gè)樹(shù)形結構權限設定的概念就對很多領(lǐng)域比較通用。
樹(shù)形結構是組織信息的基本形式,我們現在看到的網(wǎng)站或者ERP前臺都是以樹(shù)形菜單來(lái)組織功能的,那么我們在進(jìn)行架構設計時(shí),就可以將樹(shù)形結構和功能分開(kāi)設計,他們之間聯(lián)系可以通過(guò)樹(shù)形結構的節點(diǎn)link在一起,就象我們可以在圣誕樹(shù)的樹(shù)枝上掛各種小禮品一樣,這些小禮品就是我們要實(shí)現的各種功能。
有了這個(gè)概念,通常比較難實(shí)現的用戶(hù)級別權限控制也有了思路,將具體用戶(hù)或組也是和樹(shù)形結構的節點(diǎn)link在一起,這樣就間接實(shí)現了用戶(hù)對相應功能的權限控制,有了這樣的基本設計方案的架構無(wú)疑具備很靈活的拓展性。