我在之前一篇文章《Winform开发框架之框架演化》中,介绍了传统Winform开发框架、传统WCF开发框架、离线式WCF开发框架、混合式WCF开发框架,其中前面两种就是大家比较熟悉的框架了,后面的离线式WCF开发框架,我在《Winform开发之离线式WCF开发框架的实现介绍》一文中也做了阐述,离线式的WCF开发框架,可以看做为传统Winform开发框架+WCF同步模块而成,本文继续探讨这方面的框架设计和实现,重点介绍混合式WCF开发框架的设计思路及具体实现。
Winform开发框架之混合型框架,可以看成是传统winform开发框架和WCF开发框架之间能自由切换的一种双重框架,这种框架的特点是,就是把系统划分为很多万能模块(既适应WInform集成,也适应WCF集成),在不同的场合进行不同的切换,而且只需通过配置参数的变化就可以实现的跳转,这样非常有利于模块的集成封装。
1、混合型框架的特点
混合型框架具有下面几个特点:
1)环境适应性强,模块可重用性高。由于混合型框架,既可以用于传统Winform系统开发,也可以用于WCF分布式系统开发,因此环境适应性强;而且由于模块具有这些特点,可重用性更高,特别对于通用性的模块,更是具有无可替代的优越性。
2)响应性能更好。如果是Winform程序,那么就使用直接访问数据库方式,如果是WCF调用方式,就使用WCF的专有通道进行数据处理,更好利用系统资源,高效进行数据处理。
3)独立配置,更少的代码修改。所有通用模块,全部通过独立配置文件进行配置WCF的连接,减少主配置文件的复杂性;WCF服务逻辑独立类库,可采用多种服务寄宿方式。
2、混合型框架总体设计思路
Winform开发框架之混合型框架,还是秉承模块化的思路,可以把这个框架分为两大块,一块是主要业务系统模块(如备件管理系统),一块是各种辅助性模块(如通用权限、通用字典、通用附件管理、通用人员管理。。。。),这种两块组合,就是一个完美的系统了。
从以上图可以看到,整个系统的业务系统模块和辅助性模块,都是基于一个思路,通过接口调用开关,决定调用的是WCF服务层,还是Winform业务层(直接访问数据库),当然界面层的调用不管是调用WCF服务层还是Winform业务层,都是基于相同的接口,我们可以把它称为Facade层。辅助性模块则是多种常用模块的组合,他们可能是下面几种的常见模块:通用权限模块、通用字典模块、通用附件管理模块、通用人员管理模块等等。
3、混合型框架具体实现
为了更具体化演绎混合型的Winform开发框架,下面我通过辅助性模块之一的通用字典模块进行介绍这个混合型框架的具体实现。字典模块的内部结构如下所示。
上图的解读如下:
1)共用类库和实体类贯穿整个框架。
2)数据库通过泛型继承方式,实现更少的代码,更丰富的API实现。
3)多数据库支持,通过利用EnterpriseLibrary企业类库,支持多种数据库的集成处理。
4)内置Winform和WCF两种调用实现,通过配置文件,方便自由切换。
5)UI层通过接口调用层的工厂类,实现基于Facade的接口调用(而非具体实现类)。
6)共用UI层,UI层的界面在Winform和WCF调用方式下,均为一致,只有一个UI层。
7)各层均有相应的基类,更少的代码,更多的支持。
8)每个独立模块,构造整个框架的生态体系。
4、项目文件的组成
整个混合型框架的字典模块,按照上面的架构设计,会有不少项目工程产生,由于人的目标识别管理数目有限,因此就单个模块而言,不宜产生过多的项目DLL,否则集成会比较困难,也不适宜更好的维护。因此,基于最少DLL的原则,我设计了下面的模块目录,基本上,每个目录代表一个分层。
由于是上述框架也集成了基于WCF方式的调用方式,那么还需要创建一个WCF的字典服务,我们为了使得WCF支持更多种的寄宿方式,可以建立WCF服务库项目,如下所示这种项目。
创建了相应的分层和逻辑类后,具体的项目工程如下(部分文件由于多个项目中使用到,于是通过引用方式避免拷贝,又能集中管理,如Facade层的接口文件)。
当然还会有一个WCF服务的寄宿方式,这里通过IIS方式发布,如果必要也可以通过其他方式部署WCF服务,由于把逻辑隔离了,因此部署非常方便。
IIS部署方式的WCF服务工程如下所示。
对于IIS方式的部署,其实基本上也是在svc文件中两行代码即可(注意这个SVC文件没有后台.cs文件)
当然,还有一种方式,只需要配置Web.Config,不需要增加svc文件,也能实现WCF服务的部署的哦。
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"> <serviceActivations> <add service="WHC.Dictionary.WCFLibrary.DictTypeService" relativeAddress="test.svc"/> </serviceActivations> </serviceHostingEnvironment>
以上就是我对于混合型开发框架的演绎过程,整个框架目前已近全部完成,包括完成了通用权限管理系统模块,通用字典模块,通用附件管理模块,通用人员管理模块等这些外围通用的模块,因此框架的设计是进过实践验证过的,这样的混合型框架,非常适合用于重用性非常高的项目场景中,相比其他类型的框架,更具有高附加值,高可用性的特点。
希望通过我的混合型的框架设计思路和实现逻辑等方面的介绍,抛砖引玉,能和大家做更深的沟通和分析。