轉帖|其它|編輯:郝浩|2010-07-15 09:57:58.000|閱讀 714 次
概述:復用性是面向對象編程模型的最主要的特點之一,而在現實中的使用情況卻不盡然。面向對象可復用性并非免費的午餐,只是依靠開發工具帶來的幫助是遠遠不夠的,必須付出更多的努力你才能更好的享用它。下面我們要講述的不僅僅是代碼復用還有比代碼更多的東西需要我們用復用的視角去關注它。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
復用性是面向對象編程模型的最主要的特點之一,而在現實中的使用情況卻不盡然。面向對象可復用性并非免費的午餐,只是依靠開發工具帶來的幫助是遠遠不夠的,必須付出更多的努力你才能更好的享用它。下面我們要講述的不僅僅是代碼復用還有比代碼更多的東西需要我們用復用的視角去關注它。在這些可復用的資源中,代碼復用無疑是最不具實力的一種復用形式。
請不要認為這是筆誤,以我的觀點代碼級的軟件復用僅僅能夠使我們的程序不會變得更壞,除此之外大堆大堆的代碼庫沒有更多的價值。要使我們的軟件朝著更好的方向發展,重視其它形式的面向對象可復用性將會起到顯著的作用。讓我們一起來學習各種形式的可復用模型以及如何將這些優勢運用到我們的應用程序中去。
代碼復用
代碼復用,可復用性的一種最常見的形式。可能會有一個或多個程序使用到這段復用代碼,也就是最常見的情況復用代碼被共享為公共類或是函數庫或是過程(過程方法經常在C++中使用而在一切以面向對象為基礎的Java和SmallTalk中是沒有過程方法的)。然而糟糕的是代碼級的復用通常被實現為對現有代碼的復制和修改,以至于程序員在日常的開發中對此形式欣然接受而并未感覺到問題嚴重性。
原因在于代碼級的軟件復用其源代碼對于任何人都是公開的,如果有需要任何人包括你我都可以按照自身的要求修改代碼。那么這樣以來使用代碼級的軟件復用將是一把雙刃劍,一方面你可以自己決定是否使用或者何時使用它;另一方面作者如果以源代碼的形式推出使用版本,這將使作者沒有更多的動力去維護相關的文檔,而這樣做的結果是增加了學習的難度和門檻。
代碼級軟件復用最大的好處在于可以大量減少重復代碼的出現,降低了開發和維護成本。不利之處在于,它的作用范圍僅限于程序的編寫而且會造成程序結構過分耦合。
模版復用
模版復用是一種典型文檔說明性復用。它通常被實踐于運用一系列規定格式管理手工書寫的文檔,建模模型以及程序代碼。例如,模版復用形式經常被組織機構采用并用來規范用例說明,狀態報告,開發進度,需求變更,用戶需求,對象結構以及方法說明等文檔。文檔模版形式的最大的好處在于對于手工書寫文檔的統一性和質量有了較好的保證。而最大的缺點在于使用者常常會因為個人的需要而修改文檔規格造成混亂。
文檔模版的最佳使用原則既是使其使用者能夠非常容易的接受。我所見過的比較簡潔文檔模版即微軟的文檔模版而比較復雜且需要多人共享的模版非(Lotus Notes)莫屬。因為你的組織需要圍繞文檔模版的使用進行培訓,以便大家都可以一致,正確的使用文檔模版。
組件復用
組件級的復用性體現在利用一些預生成好的,模塊化程度高組件進行程序開發。組件通常是在某一個方面的能夠高效解決問題的對象集合。組件級別的復用性不同于代碼共享,因此不需要開發者直接訪問原始代碼。同繼承級別的復用性也有著本質的區別因為不需要引入子類的概念。組件復用最常見的例子就是JavaBean和 ActiveX控件。
使用組件級的軟件復用有著很多的優點。首先,組件具有的模塊獨立性使得它能夠方便的插入你的應用程序中,而此特性使得組件級復用的適用范圍大大超過代碼級復用和繼承級復用。其次,廣泛存在的基礎平臺例如Win32和Java平臺都為第三方廠方開發和銷售他們的組件提供了便利。對于組件級復用最大的不足之處在于組件獨立性要求其粒度要足夠的小,因此我們將需要管理大量的組件對象。
使用組件進行開發最常碰到的方面就是用戶界面組件了,例如滑動條,圖像組件和按鈕組件,然而應用程序中使用組件的機會要遠遠大于用戶界面。你可以把進行網絡訪問和鏈接數據庫的功能模塊封裝成可用性更高的組件。如果你自己要實現一個組件,那么盡量保持這個組件功能的單一性吧。比如說一個供輸入普通地址的組件將會在很多界面中被用到。而一個同時供輸入普通地址,e-mail地址和電話號碼的組件,當其集以上三個功能于一身時可重用性將會大打折扣。明智的方案是分別創建三個可重用的組件。因此一個組件對某方面的功能的封裝性越高其可復用性也就越高。
框架復用
在實現了基本功能和業務對象的基礎上進行的開發通常稱之為框架復用。開發人員在框架的基礎上進行開發,只需要完成應用程序最終20%的部分而例外80%的部分已經由框架完成了。框架的應用在用戶界面編程中經常出現,還有一些成熟的框架模型被應用在保險,人類資源,制造業,銀行和電子商務軟件開發中。框架級別的復用性體現了從較高的領域對象復用的特點。
框架對業務領域重點提出了相應的解決辦法并將那些復雜的需要花費時間進行開發驗證的復雜邏輯進行了良好的封裝。同時框架復用也有自身的缺點,框架的復雜程度給使用者的學習和使用帶來了一定的難度。通常情況下框架的使用者會被綁定在一個廠商,這會增加應用程序的開發風險。其次盡管框架已完成了盡80%的基礎功能,但剩余的20%和具體業務,流程相關的需求還需要我們來實現。我們還常常因為要使用框架不得不修改已有的業務邏輯以適應框架的特點,只有使用通用的廠商和組織下的框架我們才可能避免剛才的麻煩。
工程產出物復用
工程產出物復用包括使用以前創建的用例,標準文檔,模型,過程方法和計劃以及應用程序等。工程產出物的復用給新的工程的展開提供了堅實的基礎。工程產出物的復用可以區分為幾種程度,例如照搬舊工程的應用到新的工程中并在此基礎上進行實踐。編碼格式和應用程序規格在項目之間都可以通過形成建模輔助說明和經驗總結文檔進行溝通。通過對已有應用程序的修改和包裝,同樣可以完成對已有工程產出物的復用。
項目產出物的復用保證了項目之間的一致性并減少了組織新項目的負擔。此外,你還可以方便的在線購買或是查找一些產出物:例如多個平臺下的用戶交互控件,主流語言的編碼規范,面向對象的方法學以及建模說明等。.而規范標準和時間流程可以很容易的進行變更,這使得基于產出物的復用性概念往往被架空而得不到實踐,我們要在應用程序開發中仍不要忽略了對已有產出物的復用。
模式復用
模式復用指的是利用已被反復實踐的規則解決通用性問題。它常常被描述為一個單獨的類對象當通常的情況下一種模式包含一到五個類。模式的復用的思想是將復用代碼背后的思想進行了抽象從而形成一種應用規則。它是一種高層次的復用機制,其生存期遠遠超過了描述它的語言甚至是規范它的面向對象思想。
聯絡點模式是我在Building Object Application 一書中所描述一類問題的解決規則。利用通用建模語言建立的聯絡點模型展示了對機構之間的聯絡方式進行分組的通用解決規則。
模式使用的場景描述了你的組織在與客戶,雇員以及供應商進行交互時所使用的聯系方式例如e-mail,普通郵件地址,電話等,都可以被看作一種聯系方式,因此聯絡點模式增加了應用程序的靈活性。利用聯絡點模式你不僅可以使用郵遞將發票送給客戶,還有電郵和傳真的方式可以使用。同樣你可以利用英特網代替普通郵件為你的客戶送上需要的視頻信息。聯絡點模式很好的滿足了上述的情況,我也在很多的項目中實際運用了該模式。模式復用提供了更高層次的復用和跨平臺,跨語言的特性。模式將眾多復雜問題的解決思想進行了抽象,使得模式的使用增強了應用程序的可維護性。但模式復用并不是一勞永逸的工具,我們仍需要自己在項目中去實現它。
領域組件復用
領域組件復用主要涉及到確立和開發大范圍的可復用性商業組件。某個領域方面的組件常常是一系列關系緊密,完成具體功能的商業對象組合。通過對電信企業某個商業組件的描述圖可以看出,每個組件都是包含了多個類對象的功能聚合體。例如,服務提供組件包含了100多個類對象,其功能涉及長途電話業務,有線電視業務和互聯網服務業務等。領域模型的初始化確立是指以架構驅動為基礎來管理應用程序的建模,修改和補充。
領域組件的復用性具有很大的潛力,主要表現在大量已有的,關系緊密的商業功能在許多的應用程序中都會用到。任何領域對象都應該被設計為可重用的,因為領域對象可以高效的融入商業功能中并為今后的管理和重用提供了基礎。
令人高興的是我們可以將上述幾種復用方式結合在一起使用。可以肯定是,框架級別的復用性要求將關注點放在框架結構,規定以及針對性的培訓上,但是我們同樣可以享受其它重用方式帶來的好處。項目產出物和組件級別的重用是非常容易實踐的,只要花費少許時間我們就能發現許多可重用的東西。
模版復用同樣可以從網上獲取相應的資源,但這里有所不同的是如果我們的機構沒有形成一個很好的處理流程的話,那么模版復用的所帶來的好處將會大打折扣。繼承和模式復用都是需要建模時期考慮的,如果要在實際項目中使用它們是需要花費時間學習的。
回到現實中來,我會用項目產出物復用和組件復用的思想來培訓相關的架構師,并在適當的時候引入繼承復用和模式復用或是實現基于架構驅動的領域組件復用。還有一點就是要相信我們的開發人員,他們可以處理好代碼級的復用。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載