使用 SailingEase WinForm 框架構建復合式應用程序(插件式應用程序)


SailingEase WinForm Framework WinForm開發框架開發手冊:http://docs.shengxunwei.com/Home/Browser/sewinformfw/

 

      對於一些較小的項目,具備一定經驗的開發人員應該能夠設計和構建出便於進行維護和擴展的應用程序。但是,隨着功能模塊數量(以及開發維護這些部件的人員)的不斷增加,對項目實施控制的難度開始呈指數級增長。

      SailingEase WinForm 框架為您提供了針對此問題提出的解決方案。在本文中,將對基於SailingEase WinForm 框架的復合應用程序的定義進行解釋,並簡要說明如何才能構建一個基於 SailingEase WinForm 框架功能的復合應用程序。

 

      傳統的單一應用程序

      傳統的單一應用程序每個控件都緊密耦合在一起,UI 中存在大量用於協調各個部分的邏輯。控件之間還存在着相互依賴關系。

      由於存在這些依賴關系,因此無法通過某種簡單的方法將應用程序分解成可在其中分別開發各個不同部分的窗體。雖然可以將所有用戶控件都放在一個單獨的程序集中以提高可維護性,但這種做法只是將問題從主應用程序轉移到了控件程序集,治標不治本。在這種模型中,進行重大更改或引入新功能都非常困難。

 

      基於 SailingEase WinForm 框架的復合應用程序(插件式應用程序)

      基於 SailingEase WinForm 框架的復合應用程序由運行時動態發現和構成的松散耦合模塊組成。模塊包含代表系統的不同垂直片段的可視和非可視組件。可視組件(視圖)被組合在一個常規外殼中,可用作應用程序所有內容的宿主。復合應用程序可提供各種服務,將這些模塊級組件結合在一起。模塊可提供與應用程序的特定功能相關的其他服務。

      從較高的層次來看,復合應用程序是“復合視圖”設計模式的實現,此模式可描述包含子項的視圖的遞歸 UI 結構,這些子項本身也是視圖。這些視圖然后通過某種機制組合起來 — 通常是在運行時而非設計時靜態組合。

      模塊會影響在其中創建主復合視圖(也稱為外殼)的視圖。模塊永遠不會相互直接引用,也不會直接引用外殼。相反,它們會利用服務在彼此之間以及與外殼之間進行通信,以響應用戶操作。

      使用模塊來組成系統有很多好處。模塊可聚合來自同一應用程序中不同后端系統的數據。此外,系統可隨着時間的推移更加方便地發展演變。在系統需求發生變化而需要向系統中添加新模塊時,與非模塊化系統相比,模塊化系統面臨的沖突要少很多。而且還可以對現有模塊進行獨立性更強的改進,從而改善可測試性。最后,模塊可由不同的團隊開發、測試和維護。

一個典型的基於 SailingEase WinForm框架的應用程序

 

      詳詢QQ:279060597

 

      創建基於 SailingEase WinForm 框架的應用程序

      引導程序和容器

      使用 SailingEase WinForm 框架構建復合應用程序時,首先必須初始化幾個核心復合服務。這就引入了引導程序。它可以執行發生復合所需的全部功能。在許多方面,它都類似於應用程序的 Main 方法。

      對於容器,指的是控制反轉 (IoC) 容器/依賴關系注入 (DI) 容器。容器在應用程序中起着關鍵作用。容器存儲着應用程序中使用的所有應用程序服務。它負責在需要的位置注入這些服務。

      在配置容器的同時,還會自動注冊幾個核心服務(如事件聚合器),基本的引導程序允許您覆蓋其中的任何服務。例如,自動注冊 ImoduleLoader 服務。如果在引導程序中覆蓋 ConfigureContainer 方法,即可注冊自己的模塊加載程序。

 

      模塊的加載

      在引導程序中,通過覆蓋方法 GetModuleCatalog 即可加載所需的模塊,除了通過 ModuleCatalog 的 AddModule 方法來加載模塊之外,可以在此實現其它任何所需的模塊加載方式。

 

      定義並實現一個模塊

      在基於 SailingEase WinForm框架的應用程序中,模塊是復合應用程序的分離單位,可將其部署為單獨的程序集(盡管並非必需)。模塊包含了大部分的功能。

      這是一個基於 SailingEase WinForm框架的應用中的一個模塊,StartPageModule.cs是實現 IModule 接口的類。此接口僅包含一個方法,稱為 Initialize。如果把引導程序看作應用程序的 Main 方法,那么此處的 Initialize 方法就是模塊的 Main。

      在該模塊的構造函數中,我們取得 IUnityContainer 容器,事件聚合器 IEventAggregator ,以及工作區服務 IWorkbenchService。

      IUnityContainer,IEventAggregator和IWorkbenchService它們究竟從何而來?我是否要將邏輯硬編碼到模塊的初始化代碼中?

      答案是“否”。加載模塊時,SailingEase WinForm框架自動將模塊需要的服務從容器中解析出來,注入到模塊的構造函數中,如果我們需要在模塊初始化時獲得其它服務,只需在構造函數中直接加入參數即可。

      在該模塊的 Initialize 方法中,我們做了兩件事:注冊導航項到應用程序的外殼(主窗口)中,訂閱應用程序中的事件。

 

      在不同的模塊間發布/訂閱事件

      SailingEase WinForm 框架為您提供了事件聚合服務,在傳統的單一應用中,不同功能點之間的事件訂閱是直接的引用與依賴關系,而SailingEase WinForm 框架通過事件聚合服務,使得事件的訂閱者,與發布者完全解耦合,不存在任何引用與依賴關系。

      傳統的應用程序事件發布訂閱:

      功能A發布事件 ProjectOpenedEvent ,功能B訂閱此事件時,必須在編碼過程中依賴,引用功能A的程序集或者類。

      基於 SailingEase WinForm 框架的事件發布訂閱:

      模塊B獲得事件聚合服務,向事件聚合器訂閱事件 ProjectOpenedEvent,當有其它事件發布者,如模塊A,向事件聚合器發布事件 ProjectOpenedEvent時,模塊B將得到通知從而執行相關代碼。

      模塊A與模塊B,或更多的此事件訂閱、發布者,不存在任何依賴,引用關系,它們通過事件聚合服務發布,訂閱事件。

      例如我們上文中的 StartPageModule 訂閱了兩個事件,ApplicationRunEvent 和 ProjectOpenedEvent。

      我們的 StartPageModule 無需關心誰是事件 ApplicationRunEvent 和 ProjectOpenedEvent 的發布者,也無需關系發布者將在什么情況下,什么時間發布這兩個事件,StartPageModule 只需做好響應這兩個事件的准備即可。

      而我們的事件發布者,也無需關心誰是事件的訂閱者,只需在應該發布事件的時候,向事件聚合器發布對應的事件即可。

      下面的代碼發布了事件 ApplicationRunEvent。

      通過事件聚合機制,模塊間的事件發布,響應實現了完全的解耦合,模塊與模塊間不存在任何引用,依賴的關系。即使將某個事件的訂閱者模塊或發布者模塊暫時的移出系統,其它模塊都不會受到影響。

 

      通過服務在不同的模塊間交互數據或調用功能

      在過去單一式應用程序中,當不同的功能點間需要交互數據或存在功能調用時,通常在編碼時就將它們放在一起,有經驗的程序員或許會將不同的功能點放在不同的程序集中,但依然避免不了程序集間互相引用所造成的高度耦合與依賴。

      在 SailingEase WinForm 框架中,通過服務的概念來解決模塊間的互操作問題,使模塊間不存在任何依賴與引用。

      通過一個簡單的例子就能了解,例如我們的模塊A提供了客戶的基本信息管理功能,而模塊B專門用於處理與客戶的聯系記錄。如何在模塊A中需要列出指定客戶的聯系記錄?

我們為客戶聯系記錄管理模塊(模塊B)設計一個服務接口 ICustomerContactService,我們將該接口定義在一個所有模塊都已知的基礎程序集 Infrastructure 中,然后我們在模塊B中實現此接口,實現接口中定義的用於提供聯系記錄信息的方法,並將實現后的服務注冊到 SailingEase WinForm 框架的服務容器中。

      模塊A在需要列出客戶的聯系記錄信息時,只需從服務容器中取出 ICustomerContactService,即可通過該接口調用其所提供的方法獲取信息,而不必關系接口的實現者與提供者是誰。

 

      SailingEase WinForm 框架為您實現了許多用於開發基於.NET 平台的 Windows應用程序所需的服務,如多文檔窗口管理,上下文菜單管理,系統環境相關的服務等等。基於這些服務,您將輕易獲得質量可靠,擴展性強,低耦合度可配置化的專業Windows應用程序。

      SailingEase WinForm 框架提供完整的源代碼,代碼風格優秀,帶有詳細的注釋和說明,在使用 SailingEase Winform框架的過程中,我們提供全程指引與技術支持。

 

        另請參閱:

        SailingEase WinForm 開發框架

        使用 SailingEase WinForm 框架構建復合式應用程序(插件式應用程序)

        DEMO下載


         未完待續,敬請期待……

 

 

         Email:cao.silhouette@gmail.com

         QQ:279060597

 

Windows開發框架,WinForm開發框架,.NET開發框架

        招客寶在線客服系統


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM