,這些單元可以獨立地被部署、他們可以自我管理并且被虛擬部署到網(wǎng)絡(luò)的任何地方,業(yè)務組件((Business components)執(zhí)行業(yè)務邏輯、遵循一定的業(yè)務規(guī)則并且管理相應的數(shù)據(jù)(數(shù)據(jù)庫操作稱為manage corporate data);而技術(shù)組件(Technical components)則提供相應的平臺以便業(yè)務組件可以依賴其上運行,例如權(quán)限、組件管理等。 JdonFramework/Spring都屬于一種技術(shù)組件框架,而我們具體項目的業(yè)務層代碼如果能夠提煉可以復用,則是業(yè)務組件;JdonFramework/Spring則都提供了業(yè)務組件賴于運行的一些核心底層機制,特別是組件的管理,如組件的創(chuàng)建、組件的獲得、組件的資源管理、組件的消亡等生命周期支持,所以,我們可以在JdonFramework/Spring中加入自己的業(yè)務組件,當然,JdonFramework還提供了Session等狀態(tài)管理的支持功能,為業(yè)務組件提供了更廣闊的生命周期支持。 組件復用技術(shù)以前是停留在編譯前期,也就是說:我們在編程時,導入所需要的其他組件Jar包,然后混同我們的項目編譯部署,但是這需要通過專業(yè)技術(shù)人員實現(xiàn),很顯然是不能適應原則中第一句:給予人們可以裁剪他們系統(tǒng)的能力應適應需求變化,這里的“人們”應該是指軟件最終用戶,應該給予用戶自己改變系統(tǒng)的能力,也就是說:需要提供軟件系統(tǒng)運行時能夠動態(tài)改變自身的能力。 組件復用技術(shù)以前停留在軟件編譯階段,現(xiàn)在則更靠前,必須在軟件運行階段,當然對技術(shù)要求相當高,需要語言支持RTTI(簡單又神秘的Class.forName發(fā)揮作用了),這在"Evolution, Architecture, and Metamorphosis"一文中被認為是Metamorphosis,現(xiàn)在由于AOP技術(shù)出現(xiàn),AOP有一種動態(tài)Weaving技術(shù),實際就是在軟件運行時實現(xiàn)動態(tài)攔截,這樣給予終端用戶更大的改變系統(tǒng)能力,他們基本可以以動態(tài)插拔的概念實現(xiàn)多個組件的組合運行。在"AOP vs Decorator"一文中,我把編譯階段的組件組合方式(我更愿意稱為靜態(tài)組合)和運行時組合等兩種處理方式,合并稱為過濾器模式,如果你希望采取組件可插拔式的復用,就可以使用過濾器模式。
組件可插拔更換
為什么說組件的可插拔非常重要? 組件重用目的是為了更好地適應需求變化,但是有了組件重用不代表就快速適應需求變化,因為組件本身也會產(chǎn)生設(shè)計錯誤(提煉得不夠抽象或者組件很難以替代),這就必然導致軟件系統(tǒng)得維護成本提高,那么快速適應需求變化的目標也就成為一紙空文。實踐證明:組件設(shè)計問題已經(jīng)成為導致軟件開發(fā)失敗的一個主要因素。 組件設(shè)計有兩個主要風險:組件提純的純度和組件的替代方式。提煉的純度也就是抽象的高度,組件的抽象程度越高,當然可重用范圍越廣,但是往往我們只有經(jīng)歷多個項目后,才發(fā)現(xiàn)自己的組件提煉還欠火候,這實際是組件的提煉過程成本。 組件提練雖然取決于人為設(shè)計因素,但是在實現(xiàn)手段上也依賴于組件的替換方式,通過經(jīng)常反復頻繁的微調(diào)和更換,才能將組件不斷提煉向理想狀態(tài)靠攏,所以,必須有一種方便的組件替換方式提供頻繁更換支持,我們總不希望更換組件象以前更換汽車發(fā)動機火花塞一樣,需要拆開汽車,打開發(fā)動機那樣麻煩吧? 參考PC電腦硬件設(shè)計:更新CPU或內(nèi)存條,只要直接插拔就可以,這些部件和母版都是一種松散的、可插拔的關(guān)系,如果軟件組件替換是動態(tài)的可插拔更加方便終端用戶在軟件系統(tǒng)交付后,根據(jù)需求改變他們的系統(tǒng)。組件可插拔本質(zhì)上是這些組件必須是最大化的松耦合,彼此依賴影響非常小,換句話說:如果實現(xiàn)了可插拔更換,說明你的組件已經(jīng)
項目經(jīng)理勝任力免費測評PMQ上線啦!快來測測你排多少名吧~
http://m.opto-elec.com.cn/pmqhd/index.html