隨着時間的推移,Winform也算是可以堅持下來最久的技術之一了,它的昔日輝煌和現今的依舊活躍,致使了它依舊擁有者很龐大的用戶羣體,雖然目前不少技術突飛猛進的,曾經的ASP、ASP.NET WebForm、Asp.NET MVC、WPF等技術基本上淡出了視野,而迎來了.NET Core、UWP等技術應用,.NET Core也給.NET迎來了一次重要的涅槃重生的契機,能夠更高效的運行在各類平臺上,從而激發了.NET的又一春。Winform的技術雖然基本上已經壓縮在必定的範圍內,不過因爲的用途普遍,微軟也沒法徹底捨棄,聽說在即將到來的.NET core 3.0裏面,會支持Winform,那真是很是不錯的一次轉變。前端
我本身也是一個Winform開發的擁躉,基本上十幾年來一直用着Winform開發各類各樣的應用(雖然我也作不少相關的Web開發),從最先的一些小工具,小共享軟件什麼的,到後面給客戶開發一些數據管理系統、業務管理系統等等,所以在這方面使用還算有必定的背景,能夠對WInform這個技術應用作一個我的的歸納。sql
1)用戶體驗數據庫
在Winform應用裏面,和其餘Web系統比起來,它的用戶體驗是最好的,並且界面響應速度也比Web界面來的快捷一些,因爲不少狀況下,用戶考慮使用方便性,如一些報表的展現、打印、導入導出文件的處理等常規的操做,都仍是習慣使用Winform這種定製型很是好的界面來處理,畢竟大多數狀況下,單位都有一套業務和數據的管理系統來處理這些業務。安全
2)數據敏感服務器
另外不少狀況下,如一些事業單位、機構什麼,他們的數據是比較敏感的,不但願對外公開,網絡的引入會提供數據外泄的可能,另外它們也是常常處於內網的環境下,所以一個單機版的程序就能夠搞定他們的平常業務處理了,這種特別的業務環境,註定了使用Winform來處理會更勝一籌。網絡
3)開發便利架構
Winform開發的程序,發佈共享比較容易,直接安裝就可使用,能夠不須要部署在雲端(雖然個人混合框架方式能夠訪問Web API、WCF等服務獲取數據,透明的數據處理);並且Winform的界面開發起來很是方便,結合界面套件,能夠作出很是棒的界面效果。另外從開發角度上講,Web前端的技術淘汰很是快,Winform的技術積累反而是在逐步加固的過程,所以對於一些開發人員來講,迭代Winform開發的應用會更加方便,也更加熟練,所以只要客戶在用,系統兼容,這種Winform的程序會一直保留下去。框架
1)界面開發模塊化
Winform開發對比其餘有很多優勢,主要的特色仍是開發方便,基於必定的框架,能夠快速開發特定的業務管理系統。以下是我客戶關係管理系統的界面效果。主界面是採用了DevExpress套件,可讓界面看起來很是統一漂亮,另外對於界面的開發,咱們能夠基於數據庫信息的基礎上,經過工具快速生成常規的列表展現界面,以及編輯界面,從而進行必定的調整便可。工具
對於列表界面,常規的就是包含數據的分頁展現、查詢、高級查詢、導入、導出、打印等這些常規的功能,這些均可以經過定義好的界面模板進行統一輩子成,生成後進行必定的調整(如加入左側樹形列列表)便可。
如這個編輯界面,也是基於數據庫信息的生成後進行必定的調整便可。咱們能夠快速的修改控件的類型,如修改成下來列表類型,備註類型等,而在代碼中進行字典類型綁定就能夠顯示字典數據了。
2)後臺代碼開發
對於一個新建的業務表,咱們須要開發的須要底層的實現和界面層的展現,這些工做量也是很是巨大的,若是基於控件細粒度的處理,也是很是繁瑣的工做,所以基於這些開發過程的考慮,咱們引入了提升效率開發的代碼生成工具Database2Sharp,專門爲咱們基於開發框架基礎上的框架實現代碼開發,和業務界面展現的快速開發。
代碼生成工具,不只可以讓它生成咱們常規開發的界面層如下的實現代碼(包括BLL、DAL、Entity、IDAL等層,以及混合框架的WCF、Web API的實現層和調用封裝層),以及界面層的調用代碼。
有了這些的處理,咱們可極大減輕工做量。
生成的項目中,咱們已經有了對應框架支持的實現層了。
普通Winform框架的分層架構圖。
3)底層數據庫支持
在實際需求中,你每每不能決定客戶須要用什麼數據庫,那麼須要根據實際需求或者環境進行數據庫類型的選型,若是是單機版爲了方即可以使用SQLite,若是是已有業務系統或者須要響應速度快一些的,那麼考慮使用SQLServer或者Mysql、有些歷史緣由的可能會用PostgreSQL或者Oracle等等。那麼框架的彈性就須要支持多種數據庫的了,這種支持不能致使太大的工做量最好,不然會弄得焦頭爛額的。
框架底層數據庫訪問採用了微軟企業庫實現,所以在處理多種數據庫訪問的時候,可以提供統一的訪問處理操做,同時對不一樣的數據庫支持操做也是很是不錯的。下圖是框架底層數據庫的支持狀況。
採用了微軟企業庫Enterprise Library做爲咱們底層的數據庫訪問模塊後,對於多種數據庫的訪問操做,就會統一採用這個企業庫的數據庫訪問對象,操做起來很是一致,爲了對不一樣數據庫的常規增刪改查等一些操做進行進一步的封裝,以達到簡化代碼的目的,所以咱們能夠爲每一個不一樣的數據庫定義一個數據訪問操做基類,以便實現一些不一樣數據庫差別性的處理,可是它們仍是有一個共同的數據訪問基類。
採用不一樣的數據庫,咱們須要爲不一樣數據庫的訪問層進行生成處理,如爲SQLServer數據的表生成相關的數據訪問層DALSQL,裏面放置各個表對象的內容,不過因爲採用了相關的繼承類處理和基於數據庫的代碼生成,須要調整的代碼不多。
4)數據集中的雲端模式
在不少業務系統中,有不少需求是但願部署在雲端服務器中,這種方式能夠實現數據的幾種管理,也有利於安全。所以咱們整合了WCF和Web API兩種服務訪問方式,而在開發界面基礎上,不須要太大的變化便可接入,這就是咱們的混合開發框架。
混合框架的多種方式支持
而對於WCF或者Web API的封裝,咱們是經過接口適配的方式,調用層須要對業務接口進行封裝,從而產生封裝的代碼量。所以能夠利用代碼生成工具生成對應業務模塊的接口適配代碼,能夠極大減輕對這部分的開發效率損耗。
混合框架的架構以下所示。
代碼生成工具Database2Sharp,生成總體性的混合型框架項目以下所示,只是沒有下圖的界面部分,這部分在實際開發過程當中,結合個人混合型框架案例進行整合便可,另外也能夠界使用Database2Sharp進行Winform界面的開發,這樣總體性就很是方便操做了:
Winform調用Web API的過程,這個過程能夠經過下面這個圖示進行講解。
5)模塊化的框架結構
在開發Winform應用的時候,咱們除了但願簡化代碼外,其實不少常規的業務,咱們但願不但願都要從新開發,如權限管理系統、字典管理、附件管理等,這些是不少業務都涉及到的模塊,咱們應該在必定粒度上實現整合現有模塊便可,這樣能夠下降咱們開發的難度和減小開發時間,咱們就能夠把重要的時間花在具體的業務領域裏面,快速響應客戶的需求開發。
混合型框架能夠當作是Winform框架高級版本,除了它自己是一個完整的業務系統外,它外圍的全部輔助性模塊均(如通用權限、通用字典、通用附件管理、通用人員管理。。。。)都實現了這種混合型的框架,所以使用很是方便,整個框架若是簡化來看,就是在原有的Winform界面層,用接口調用方式,避免和業務邏輯類的緊耦合關係。