Winform開發架構之混合型架構,可以看成是傳統winform開發架構和WCF開發架構之間能自由切換的一種雙重架構,這種架構的特點是,就是把系統劃分為很多萬能子產品(既适應WInform內建,也适應WCF內建),在不同的場合進行不同的切換,而且隻需通過配置參數的變化就可以實作的跳轉,這樣非常有利于子產品的內建封裝。
混合型架構具有下面幾個特點:
1)環境适應性強,子產品可重用性高。由于混合型架構,既可以用于傳統Winform系統開發,也可以用于WCF分布式系統開發,是以環境适應性強;而且由于子產品具有這些特點,可重用性更高,特别對于通用性的子產品,更是具有無可替代的優越性。
2)響應性能更好。如果是Winform程式,那麼就使用直接通路資料庫方式,如果是WCF調用方式,就使用WCF的專有通道進行資料處理,更好利用系統資源,高效進行資料處理。
3)獨立配置,更少的代碼修改。所有通用子產品,全部通過獨立配置檔案進行配置WCF的連接配接,減少主配置檔案的複雜性;WCF服務邏輯獨立類庫,可采用多種服務寄宿方式。
Winform開發架構之混合型架構,還是秉承子產品化的思路,可以把這個架構分為兩大塊,一塊是主要業務系統子產品(如備件管理系統),一塊是各種輔助性子產品(如通用權限、通用字典、通用附件管理、通用人員管理。。。。),這種兩塊組合,就是一個完美的系統了。

從以上圖可以看到,整個系統的業務系統子產品和輔助性子產品,都是基于一個思路,通過接口調用開關,決定調用的是WCF服務層,還是Winform業務層(直接通路資料庫),當然界面層的調用不管是調用WCF服務層還是Winform業務層,都是基于相同的接口,我們可以把它稱為Facade層。輔助性子產品則是多種常用子產品的組合,他們可能是下面幾種的常見子產品:通用權限子產品、通用字典子產品、通用附件管理子產品、通用人員管理子產品等等。
為了更具體化演繹混合型的Winform開發架構,下面我通過輔助性子產品之一的通用字典子產品進行介紹這個混合型架構的具體實作。字典子產品的内部結構如下所示。
上圖的解讀如下:
1)共用類庫和實體類貫穿整個架構。
2)資料庫通過泛型繼承方式,實作更少的代碼,更豐富的API實作。
3)多資料庫支援,通過利用EnterpriseLibrary企業類庫,支援多種資料庫的內建處理。
4)内置Winform和WCF兩種調用實作,通過配置檔案,友善自由切換。
5)UI層通過接口調用層的工廠類,實作基于Facade的接口調用(而非具體實作類)。
6)共用UI層,UI層的界面在Winform和WCF調用方式下,均為一緻,隻有一個UI層。
7)各層均有相應的基類,更少的代碼,更多的支援。
8)每個獨立子產品,構造整個架構的生态體系。
整個混合型架構的字典子產品,按照上面的架構設計,會有不少項目工程産生,由于人的目辨別别管理數目有限,是以就單個子產品而言,不宜産生過多的項目DLL,否則內建會比較困難,也不适宜更好的維護。是以,基于最少DLL的原則,我設計了下面的子產品目錄,基本上,每個目錄代表一個分層。
由于是上述架構也內建了基于WCF方式的調用方式,那麼還需要建立一個WCF的字典服務,我們為了使得WCF支援更多種的寄宿方式,可以建立WCF服務庫項目,如下所示這種項目。
建立了相應的分層和邏輯類後,具體的項目工程如下(部分檔案由于多個項目中使用到,于是通過引用方式避免拷貝,又能集中管理,如Facade層的接口檔案)。
當然還會有一個WCF服務的寄宿方式,這裡通過IIS方式釋出,如果必要也可以通過其他方式部署WCF服務,由于把邏輯隔離了,是以部署非常友善。
IIS部署方式的WCF服務工程如下所示。
對于IIS方式的部署,其實基本上也是在svc檔案中兩行代碼即可(注意這個SVC檔案沒有背景.cs檔案)
當然,還有一種方式,隻需要配置Web.Config,不需要增加svc檔案,也能實作WCF服務的部署的哦。
以上就是我對于混合型開發架構的演繹過程,整個架構目前已近全部完成,包括完成了通用權限管理系統子產品,通用字典子產品,通用附件管理子產品,通用人員管理子產品等這些外圍通用的子產品,是以架構的設計是進過實踐驗證過的,這樣的混合型架構,非常适合用于重用性非常高的項目場景中,相比其他類型的架構,更具有高附加值,高可用性的特點。
希望通過我的混合型的架構設計思路和實作邏輯等方面的介紹,抛磚引玉,能和大家做更深的溝通和分析。