基於 SailingEase WinForm Framework 開發優秀的客戶端應用程序(1:概述)

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

 

本系統文章將詳細闡述客戶端應用程序的設計理念,實現方法。編程

本系列文章以  SailingEase WinForm Framework 爲基礎進行設計並實現,但其中的設計理念及方法,亦適用於任何類型的客戶端應用程序的設計與開發。後端

 

目錄:設計模式

http://www.cnblogs.com/sheng_chao/p/6084144.html 多線程

 

前言:架構

多是接觸計算機比較早,從96年左右386開始,到 Trubo C,以及後來的Foxpro、VB、Delphi,一直以來彷佛都有一種客戶端程序情節,喜歡寫客戶端程序。併發

在 .Net 出現之後,投入了許多時間在研究 .Net 編程上,在客戶端領域早年基本以 WinForm 爲主,近幾年逐漸轉向了 WPF。框架

除了平常工做中的項目開發,業餘時間使用 WinForm 寫過許多東西,比較成型的大概有兩個異步

 

1)SailingEase WinForm Designer IDE (2007~2010 暫停開發)模塊化

    http://www.cnblogs.com/sheng_chao/p/4387249.html

    高度實現的 IDE 開發環境,完整實現了 WinForm Designer,可經過可視化配置的方法,定義界面和業務邏輯,並使用 XML 進行描述。

    這個項目一開始的設想,心很大,企圖作一個讓不懂編程的人,也能拖拖畫畫加上配置,來生成企業所需的管理軟件。投入了大概兩年多的業餘時間,這期間應該是我本身開發能力和設計能力增漲最快的時期,開始作這個項目的時候,有太多的問題超出能力範圍,只好處處找書看、找資料學習。在天天回家的路上看完了《設計模式》,平時的碎片時間看完了《代碼大全2》,另外閱讀了 SharpDevelop 的許多源代碼,也有一部分的實現是參考了它的思路和代碼。

   2010年左右因爲時間和精力有限,加上對於軟件項目有了一些新的認識和想法,這個項目就暫停至今。其它幾個小規模的 WinForm 項目,和本系列文章的主角:SailingEase WinForm Framework,均脫胎於此項目。

 

2)SailingEase .NET Resources Tool

    http://www.cnblogs.com/sheng_chao/p/5958846.html

  一款輔助多國語言軟件開發的實用工具,目的在於經過生成接口來約束不一樣語言資源的實現,使開發人員能夠基於接口調用資源。 此外,提供方便開發人員使用的各類實用功能,如多項目並行編輯,資源導入,Excel 導入、導出等。

  這個項目源自於上面的 IDE 項目,因爲作 IDE 時心太大,但願可以支持多國語言,可是慢慢發現從工程角度來講,這是一件很是麻煩,容易不可控的事情。就花告終時間,想了一個辦法,用接口來約束不一樣的資源。

 

最後祭出本系列文章的主角:SailingEase WinForm Framework。

其實這是從 IDE 項目中提取出來的一個純開發框架,它沒有用戶管理、權限管理之類的現成功能,而是提供純開發角度的開發框架,歸納來講提供瞭如下幾方面的功能:

 

      a.宿主程序(殼)與功能模塊(插件)的加載、調度、通訊等實現;

     b.不一樣插件之間在徹底接耦合的基礎上,同步/異步調用、狀態響應等機制的實現;

     c.插件之間在代碼層面徹底沒有互相引用關係,能夠實如今缺乏任意插件的狀況下啓動應用,即便他們在UI層有交集;

     d.支持模塊間的依存關係定義;

     d.事件聚合器,用於在徹底解耦的條件下,發佈及訂閱事件;

     d.宿主程序提供了統一的主菜單及右鍵菜單的註冊/吊銷/狀態控制機制;

     e.宿主程序提供了統一的窗口調度/加載/銷燬功能;

     f.宿主程序提供了統一的日誌記錄、異常捕獲,Web頁面互操做等功能;

     g.基於 GDI+ 自行實現的控件包,提供了高度的可擴展性;

     h.基於zip格式的文件包管理器(基於zip的自定義文件格式,讀取或寫入指定的流);

     i.對http、xml、磁盤io、反射、加解密等操做的加強與封裝; 

     j.其它……

 

第一章節:客戶端軟件的架構設計概述

    本章節將概述基於 SailingEase Winform Framework 框架的客戶端應用程序的架構設計。

    時常有朋友或者客戶會問:「你這個軟件是否是三層架構設計」。

    實際上客戶端軟件的架構並非這麼劃分設計的,也遠遠比所謂的三層架構要複雜的多,與 Web 程序在不一樣的頁面間無狀態跳轉不一樣,客戶端程序更加成一個總體,單頁面 Web 應用有一些方面與之相似,不過亦有許多不一樣。

    咱們經過一個簡單的設計圖初步瞭解基於 SailingEase Winform Framework 的客戶端程序架構:

 

     

 

      SailingEase WinForm Framework 的核心,就是模塊化。

      基於 SailingEase WinForm Framework 框架的應用程序由運行時動態加載的鬆散耦合模塊組成,模塊包含表明系統不一樣功能的可視和非可視組件,可視組件(視圖)被組合在一個外殼中(主窗口)。

      宿主程序提供各類基礎服務,並將這些模塊級組件結合在一塊兒;模塊也能夠提供與應用程序的特定功能相關的其餘服務。

 

      SailingEase Winform Framework 是「複合視圖」設計模式的實現,此模式支持包含子項的視圖遞歸結構。這些子項自己也是視圖,這些視圖經過某種機制組合起來(在運行時動態組合而非設計時靜態組合)。

      模塊永遠不會相互直接引用,也不會直接引用宿主。它們會利用服務、事件聚合等機制在彼此之間以及宿主之間進行通訊,並響應用戶操做。

      使用模塊來組成系統有不少好處。模塊可聚合來自同一應用程序中不一樣後端系統的數據。此外,系統可隨着時間的推移更加方便地發展演變。在系統需求發生變化而須要向系統中添加新模塊時,與非模塊化系統相比,模塊化系統面臨的衝突要少不少。並且還能夠對現有模塊進行獨立性更強的改進,從而改善可測試性。

      模塊可由不一樣的團隊開發、測試和維護。在小團隊開發維護模塊時,也沒必要加載編譯整個應用程序解決方案,只需創建一個包含宿主和指定模塊的精簡解決方案便可。

 

      在 SailingEase Winform Framework 中,可定義不一樣模塊間的動態依存關係,有時一個完整的業務操做須要不一樣模塊間協做完成,而其中有些環節不是必須的,此時咱們可在缺失部分模塊的狀況下,正常執行完整個業務流程:

      主動模式:

      主動模式使用建造者模式進行實現,由業務或操做的發起模塊主動控制流程,由其自身判斷須要響應的模塊和模塊是否存在。

 

   

 

      被動模式:

      被動模式使用事件聚合器進行實現,業務或操做的發起模塊完成自身操做後,向事件聚合器發送通知,在事件聚合器中註冊過的模塊會收到相應的通知和數據,從而響應業務操做,響應事件聚合器的不一樣模塊可以使用多線程技術併發處理。

      在被動模式中,事件的發佈模塊,徹底不關心有哪些模塊會響應事件,也不關心事件的響應結果。對於響應事件的模塊來講,它們也不關心事件是由誰發佈的,只需處理好相應的業務便可。

 

      

 

      視圖級別的動態依存:

      舉例來講,當我在用戶信息模塊中的用戶列表畫面中選擇用戶時,畫面底部須要顯示用戶最近一筆訂單,而這個訂單信息區域(View),須要由訂單模塊提供,可是當訂單模塊不存在,或沒有加載時,用戶畫面依然能夠正常顯示及使用,只是顯示訂單信息的位置,被隱藏了。

      當用戶模塊和訂單模塊同時存在時:

      

  選中用戶列表中的用戶,則在畫面下方自動顯示其最近訂單。

      顯然用戶模塊與訂單模塊不只有視圖層面的融合,還有操做響應上的融合,而這些融合與調用,在 SailingEase Winform Framework 中是徹底解耦合的,兩個模塊之間不存在任何互相引用關係。

       當訂單模塊不存在或沒有加載時,用戶模塊中的畫面將自動調整,UI操做不會有任何影響:

      

 

     模塊化只是基礎,除了模塊化以外,做爲宿主程序,一般會提供一系列的基本功能實現。

    其中特別重要的有幾點:主菜單/右鍵菜單/工具欄的融合與調度,窗口調度器、線程調度器、服務容器、事件聚合等等,我將在後續的文章中詳細闡述。

     

      一個典型的基於 SailingEase Winform Framework 的應用程序架構

     以 SailingEase WinForm Designer IDE 爲例:

  

 

       運行時效果:

      

 

 

       在下一章節中,我將對客戶端應用程序的架構做更進一步的闡述,並詳細說明基於 SailingEase Winform Framework 的模塊化開發如何實現。

      歡迎加我QQ交流探討,共同窗習:279060597,另外我在南京,有南京的朋友嗎?

相關文章
相關標籤/搜索