上週完成了
talend專案的重構任務,此任務是為了解決外掛程式之間的無序依賴。
軟體產品的規模總是越來越大,模組越來越多,如果出現了一點影響到後繼開發或者維護的跡象,就要果斷的進行重構,將專案及時調整到正常軌道上。開發rcp專案中遇到的典型就是隨著外掛程式數量的增多,各個外掛程式之間的依賴性越來越強,這時候如果不進行及時調整,任由其發展下去,等到出現了外掛程式迴圈依賴,再回過頭來整改可就不是那麼容易了。很有可能還要影響到相關的業務功能部件。
任何軟體系統到了一定的規模後,都可能會產生模組間的無序依賴。造成這種後果的原因可以總結為以下幾種:
1 封裝性不好,隨意開放公共類或介面給第三方使用。造成客戶**深度依賴於此模組。
2 各個模組各自為政,沒有提取公共的介面到基礎模組中,使用此模組功能的**就必須要依賴於此模組。
3 沒有良好的面向介面程式設計習慣,直接引用被依賴模組的具體類。
4 隨意使用singleton模式,只圖使用方便,不考慮在設計上是否必要。
對應於eclipse 外掛程式開發,可以理解為:
1 在plugin.xml檔案的runtime項中,不加限制的開放所有package的訪問許可權;或者在開發過程中,沒有限制,隨需隨開,不知不覺中加劇了外掛程式間的依賴程度。而且由於降低的訪問的門檻,容易養成程式設計人員的懶惰思想,不利於提高其設計能力。
2 開發初期大多是幾個人負責乙個模組,各個模組間互不干擾的開發,需要訪問其他模組是,典型的做法就是讓被使用模組提供乙個singleton的類,然後隨心所欲的使用其具體類。負責各模組的人很難在公共基礎這一問題上達成共識,或者是根本沒有考慮到這一點。沒有基礎模組的歸納總結,隨著業務的增大,很容易就造成外掛程式間的迴圈依賴。
3 使用別的外掛程式的時候,都是直接使用具體類。對外掛程式全部都是依賴於具體類,而不是依賴於抽象。
可供選擇的解決方案如下:
1 構建良好的介面體系,外部外掛程式對本外掛程式的依賴僅限於抽象。
2 提取公共部件到乙個基礎外掛程式中,其中包括全專案共享的服務和資源。全部外掛程式都依賴於此基礎外掛程式。
3 外掛程式不依賴於具體提供服務的外掛程式,而是依賴於基礎外掛程式,提供服務的外掛程式將服務註冊到基礎外掛程式中。這樣就構建了乙個服務註冊,獲取體系。減輕了各個外掛程式間的依賴程度,降低了服務提供者和服務使用者之間的耦合。
此體系可通過擴充套件點機制實現。
大型RCP專案,降低外掛程式依賴度
上週完成了 talend專案的重構任務,此任務是為了解決外掛程式之間的無序依賴。軟體產品的規模總是越來越大,模組越來越多,如果出現了一點影響到後繼開發或者維護的跡象,就要果斷的進行重構,將專案及時調整到正常軌道上。開發rcp專案中遇到的典型就是隨著外掛程式數量的增多,各個外掛程式之間的依賴性越來越強...
RCP專案 動態開啟View
public class actionmanager 獲得plugin.xml檔案中配置的檢視資訊 iviewdescriptor desc window.getworkbench getviewregistry find viewid iworkbenchaction action new sho...
讓RCP程式自動載入新外掛程式
用eclipse開發的rcp應用程式預設是不能自動載入新外掛程式的,加乙個外掛程式到rcp系統裡,需要在主外掛程式裡配上依賴關係.一是不方便 二是容易造成迴圈引用,打包麻煩.讓rcp程式自動載入外掛程式是乙個不錯的選擇,共有三個步驟 第一步 在啟動的外掛程式裡,加上org.eclipse.updat...