前面幾篇介紹了Web API的基礎信息,以及如何基於混合框架的方式在WInform界面里面整合了Web API的接入方式,雖然我們看似調用過程比較復雜,但是基於整個框架的支持和考慮,我們提供了代碼生成工具的整合,使得開發整套應用是非常方便和高效的。本文主要介紹如何利用代碼生成工具Database2Sharp,如何迅速生成基於Web API的Winform應用。
1、代碼生成工具的功能介紹
代碼生成工具Database2Sharp,是我為整個開發過程開發的一款核心軟件,已經走過了10個年頭,隨着開發項目的多樣化,這個工具也逐漸整合更多的功能,以期提高我們的開發效率。
Database2Sharp能夠支持Winform開發框架、WCF開發框架、混合式Winfrom開發框架、Entity Framework實體框架、基於MVC4+EasyUI的Web開發框架、基於Metronic的Bootstrap的Web項目等開發框架的代碼生成和整合工作;可以生成各種架構代碼、生成Web界面代碼、Winform界面代碼,導出數據庫文檔等功能。軟件生成的框架代碼具有統一的架構風格和統一調用規則,並在多年的軟件開發應用中得到實踐驗證,具有非常高的生產效率。
該軟件的目的在整合、簡化各種框架的開發流程,並統一整個開發的繼承和結構關系,提高開發效率。
為了生成整個基於Web API的Winform應用,我們選擇Enterprise Library的框架生成混合式框架項目進行簡單的介紹,希望大家對代碼生成有一個初步的了解。
首先選擇數據庫需要生成代碼的表,操作如下所示。
接着我們選擇框架的主命名空間,如我們實體類的整個命名空間為WHC.CloudMember.Entity,那么主命名空間就是前面部分WHC.CloudMember了。
最后會讓我們確認整個生成過程的,如下所示。
這樣單擊【完成】按鈕后,我們就可以順利生成我們所需的項目代碼了。為了快速開發一個完善的項目,我們一般基於各種不同的框架基礎上,增量開發一些不同的業務模塊,這樣就可以快速整合到我們的項目里面進行使用了。
2、基於WebAPI接入的Winform項目結構
1)框架總體介紹
前面隨筆,我介紹了整個混合框架中基於Web API 的Winform界面的整合過程,其中大的方面設計圖如下所示。
而對應的從Winform界面調用Web API的過程則如下所示。
但是這兩個可能沒有項目結構查看的話,對整體的了解可能還是有所欠缺,本文繼續以實際項目的結構,也就是我以Web API方式改造的會員管理系統項目結構進行展示,以實踐的項目開發過程來闡述整個開發過程,希望讀者對這些有更好的了解和更直觀的認識。
整個會員管理系統項目結構如下所示。
項目結構的總體說明如下所示。
項目名稱 | 項目說明 |
WHC.CloudMember.ClientDx | 基於Web API的WInform界面項目 |
WHC.CloudMember.Caller | 接口調用封裝類模塊 |
CloudMemberApi | Web API的服務發布項目 |
WHC.CloudMember.Core | 業務邏輯模塊的項目,包含數據訪問層、接口、實體類等 |
2)Web API服務項目介紹
我們在Winform界面里面調用的最終服務就是Web API服務,那么我們需要圍繞這個內容進行介紹,首先介紹其中的Web API項目CloudMemberApi,它的詳細內容就是包含前面幾篇關於Web API隨筆介紹的內容,包括服務接口的定義、異常的處理、令牌權限認證及識別、Web API客戶端的調用的知識點。
在控制器里面,通過不同的文件來區分不同的業務應用,當然如在必要的時候,也可以考慮引入Area的概念,對不同業務進行歸類處理。
在上面的API項目里面,主要的內容就是控制器的生成了,利用代碼生成工具的Web API控制器的生成功能,可以快速生成相關的代碼。
代碼生成后,會生成對應類的繼承關系,以及部分接口的實例代碼,方便我們進行使用。
3)服務調用包裝項目Caller項目
在Caller項目里面,就是為客戶端提供一致的調用方式,不管是WCF方式、直接訪問數據庫方式,還是目前介紹的Web API方式,我們通過Caller項目類的封裝處理,就能屏蔽他們之間的差異,使得我們的界面調用實現統一性,並且也方便在各個方式的調用中進行切換。利用在這個項目里面,Web API的Caller層項目結構如下所示。
這個項目里面包含了門面層的接口定義層Facade接口層,由於我們考慮了WCF的接入方式,因此需要增加一些WCF的接口標識,如果僅僅是考慮Web API的接入,則可以不用[ServiceContract]和[OperationContract]的聲明內容。
對於Web API的調用,我們一般通過繼承基類的方式,可以直接使用基類定義的增刪改接口的封裝處理,這樣可以極大簡化我們所需的代碼,同時降低代碼編寫的復雜度,常規的功能我們也不用重復編寫了。
同時,我們一般都保留直接調用數據庫的包裝類項目代碼【WinformCaller】,這樣我們可以在開發的時候,先着重調試好直接訪問數據庫的模式,然后在調試基於Web API的方式,這樣可以避免很多低層次的錯誤,同時也可以快速調試跟蹤代碼,為我們后面的Web API接入排除更多的錯誤,提高開發效率和代碼質量。
4)業務模塊核心項目Core項目
在各個框架以及Web API的服務里面,數據庫訪問的核心邏輯都在Core項目里面的,這個項目其實包含了BLL層、DAL層、IDAL層、Entity層的模塊內容,封裝了多種數據庫的訪問方式,默認框架支持SQLServer、Oracle、MySql、SQLite、Access、達夢等數據庫的支持,我們在DAL層進行相應的擴展處理即可,一般情況下,我們為了方便,也可以僅僅設置我們所需要的數據訪問層即可。如會員管理模塊的Core項目截圖如下所示。
如之前的架構設計圖,介紹如下所示。
4)基於Web API接口的雲會員管理系統
我們先來了解下基於Web API接口的雲會員管理系統的總體界面效果。整個系統采用的是混合式的Winform結構,但是數據的來源采用基於Web API的提供方式,也就是我們目前常用到的一種數據提供方式。所有的模塊都是基於混合式架構的基礎上,對各種接口進行了基類封裝,結合代碼生成工具,可以生成整體的框架代碼:包括Core層業務代碼;Web API層控制器代碼;以及對Web API調用進行封裝的Caller層代碼;還有就是最為重要的,Winform界面的動態生成,界面的生成可以省卻大量的低效率工作,並且可以綁定一致的訪問代碼,使得我們開發效率有了質的提高,並且能夠和整個框架有更好的整合和一致性。
基於這個基礎上我們開發了很多業務系統,並且也為客戶向相同領域擴展了很多信息管理系統,擁有了豐富的Winform項目建設經驗。下面是雲會員管理系統的界面截圖。
系列文章如下所示:
Web API應用架構在Winform混合框架中的應用(1)
Web API應用架構在Winform混合框架中的應用(2)--自定義異常結果的處理
Web API應用架構在Winform混合框架中的應用(3)--Winfrom界面調用WebAPI的過程分解