天天看點

Winform開發架構之混合型架構的剖析

混合型架構為了支援WCF方式和傳統通路資料庫方式兩種對資料操作的方式,有兩個地方有扇出操作,一個是在界面上調用接口對象擷取資料的時候有扇出操作,為了實作WCF方式和傳統通路資料庫方式的處理,如下所示。當然,如果必要,也可以擴充成支援更多的類型,如可能存在舊系統的WebService調用方式等。

Winform開發架構之混合型架構的剖析

另外,整個架構支援Oracle、SqlServer、MySql、Sqlite、Access等資料庫的通路操作,是以在業務層調用具體資料通路類的時候,根據配置的不同,具體構造的資料庫通路對象也不同,是以,這裡也有一個扇出操作,而且扇出數量和支援的資料庫一緻,如下所示。

Winform開發架構之混合型架構的剖析

混合型架構可以看成是Winform架構進階版本,除了它本身是一個完整的業務系統外,它外圍的所有輔助性子產品均(如通用權限、通用字典、通用附件管理、通用人員管理。。。。)都實作了這種混合型的架構,是以使用非常友善,整個架構如果簡化來看,就是在原有的Winform界面層,用接口調用方式,避免和業務邏輯類的緊耦合關系。由于他是通過接口方式的調用方式,它本身又可以通過配置指定指向WCF的實作,是以也囊括了WCF架構的一切特點。

Winform開發架構之混合型架構的剖析

說到WCF的通路方式,混合型架構把業務系統的WCF服務和輔助性公用子產品的WCF服務分開,首先是服務分開,然後是用戶端配置檔案分開。

Winform開發架構之混合型架構的剖析

用戶端配置檔案分開,是通過把他們的服務配置資訊分别用不同的檔案表示,如輔助性子產品的WCF配置檔案為BaseWcfConfig.config,業務系統的WCF配置檔案為WcfConfig.config,通過這樣的分離設定,我們在主配置檔案app.Config檔案裡面,就清爽很多了,如下所示。

這樣我們通過修改CallerType的内容(WCF或者WIN),就可以實作兩種不同方式的通路了。

整個項目工程的布局,除了剛才介紹的WCF服務子產品,其實還有很多其他子產品的,如下面圖所示,包括業務邏輯子產品,服務接口調用子產品,Winform界面子產品、WCF服務邏輯子產品,整個系統的子產品就包含這些,當然外圍的輔助性子產品,如字典、權限、人員等等,他們各自按照這個方式進行組織處理,系統調用的時候,不會具體關心它們的調用邏輯,因為它們的調用方式已經通過約定的CallerType的内容進行了指定。

Winform開發架構之混合型架構的剖析

對于混合型架構,不管它的資料調用邏輯是按照傳統的Winform方式,還是分布式的WCF服務調用方式,實作代碼都是一樣的,因為它是基于接口層調用,如下所示是在架構系統中調用資料字典子產品擷取資料的代碼實作。

系統架構調用自己的接口擷取資料,模式也和上面一樣,與傳統的Winform架構調用代碼相比,并沒有增加任何工作流,隻是調用對象有點變化而已。

如果是傳統的Winform架構,它的删除操作的核心調用代碼是如下所示,是不是很相似的呢?

當然,雖然混合型架構比傳統的Winform架構和WCF開發架構更為通用,不過由于它引入了多一層,而且為了實作更多子產品的分離,增加了一些設計上的複雜性,整個項目工程看起來顯得複雜了一點,如下面就是一個以字典子產品為例的混合型架構的内部結構。

Winform開發架構之混合型架構的剖析

為了實作更簡單化的開發,更快更高效的完成混合型架構的開發工作,我擴充了我的代碼生成工具Database2Sharp,使其支援這種混合型架構的代碼生成工作,這樣開發混合型架構就和開發其他兩種Winform開發架構、WCF開發架構一樣,非常友善了。

Winform開發架構之混合型架構的剖析

生成混合型架構項目的步驟就是在【EnterpriseLibrary代碼生成】的最後一步進行勾選設定即可。

Winform開發架構之混合型架構的剖析
Winform開發架構之混合型架構的剖析

代碼生成工具,生成整體性的混合型架構項目如下所示,隻是沒有下圖的界面部分,這部分在實際開發過程中,結合我的混合型架構案例進行整合即可,另外也可以界使用Database2Sharp進行Winform界面的開發,這樣整體性就非常友善操作了:

Winform開發架構之混合型架構的剖析

雖然整體性的混合型架構比其他兩種架構子產品,總體增加了一些難度及複雜性,不過,為了使得整個混合型架構開發和使用更加友善,我已經在設計上做了很多相關的工作,力求更好、更高效的使用好這種混合型架構,下面是我對整體性的架構做了的優化改進工作。

1)把所有通用的子產品開發好,友善更好的內建使用,更加高效利用通用子產品,重複利用度更高;

2)把WCF服務釋出和服務邏輯分開,更好管理和釋出WCF服務,服務釋出隻需要svc檔案,不含任何背景代碼;

3)統一的業務調用規則和命名規則,所有子產品的接口調用統一為CallerFactory<I***Service>方式,通用子產品和架構的命名規則和機制完全一樣。

4)WCF服務配置檔案分離,通用性的輔助子產品的配置檔案為BaseWcfConfig.config,業務系統的WCF配置檔案為WcfConfig.config,配置檔案分離更友善管理和維護,減少主配置檔案app.Config的複雜性。

5)最後一條,也是最重要的一條,就是代碼生成工具Database2Sharp的同步支援。通過代碼生成工具,更好、更快的生成整個混合性架構的代碼和項目工程,一鍵解決所有的煩惱。Winform界面,利用代碼生成工具Database2Sharp進行生成,然後在項目中整合即可。