国庆去了一趟北京,回来一直忙着各种各样的事情,有公司的,有个人的,就没停过来,所以很久没有写博客了,写博客要有一个好的心情及一个好的思路,否则宁愿不写,这是我的准则。虽然这段时间没有写博客分享各种经验,不过一直还在做一些框架相关的事情,很多东西沉淀下来,慢慢有空就继续分享,与大家做一些探讨研究了。
Winform开发框架方面的文章我介绍很多了,有宏观介绍,也有部分技术细节的交流,每次我希望能从不同角度,不同方面来介绍我的WInform开发框架,这些其实都是来源于客户的需求,真实的项目场景。本文主要介绍Winform开发框架的各种演化,适合在各种系统应用场景下的使用过程。Winform开发框架,从技术方向上讲,可以分为传统的Winform开发框架,WCF开发框架。对于这两种分类,根据数据存放的位置不同,也可以演化成多种应用模式。下面分别对这些演化的Winform框架进行介绍。
1、传统Winform开发框架
我这里指的传统Winform开发框架,就是利用数据库中间件,直接访问数据库的一种应用框架,根据数据库管理系统部署的位置的不同,可能分为单机版(如Access数据库、Sqlite数据库等),局域网网络版(如SqlServer、Oracle等数据库),局域网网络版,一般需要的是把数据库部署在局域网另外一个电脑上,这样应用和数据库分开,也有利于性能的提高和数据的分享。
这种开发模式,在dotnet里面,就是利用基于ado.net的操作,实现数据的直接访问,是一种比较常规的开发模式,不过问题,就是,不能通过互联网进行数据的访问,只能在单机或者局域网的环境下进行业务管理系统的部署和使用,相对目前很多分布式的应用来讲,有一定的局限性。
不过这种方式也是很常见的模式,常用在一些内部业务管理系统或者一些工作流系统的维护上,由于Winform的体验性比较好,数据也能有效管理控制,开发部署成本也相对较低,系统开发效率以及应用性能也比较高,因此是一种比较常见的框架表现模式。
如下面我的Winform开发框架界面,就是一个比较标准,传统式的界面,这种界面一般大家都比较常见。
这种Winform开发框架 是通过数据访问层访问各种指定的数据库,如SqlServer或者Oracle等,一般底层封装好一点的框架,基本上都会支持多种数据库,方便在不同的业务中使用。我的传统Winform开发框架的架构设计图,如下所示。
2、传统WCF开发框架
除了以上的传统的WInform开发框架,基于WInform的技术和WCF的分布式技术,形成了另外一种Winform开发框架,即为WCF开发框架,我这个WCF开发框架的介绍也比较多,绝大多数都是来源于真实的项目应用。其实WCF技术,即可用于Winform上,也可以用于Web上,WCF技术可以用在很多领域,如Web开发、类似Socket通讯的即时通讯应用等,这里介绍的WCF开发框架,是基于Winform的基础上使用的WCF开发框架。
这里定义的传统WCF开发框架,是指利用WInform框架的模式,来承载B/S的方式获取数据进行展示,本地不存储数据。就是直接获取数据并在列表控件或者其他基础控件上显示数据。
由于WCF框架应用了很多新的技术,以及是基于分布式网络环境的应用,因此,需要考虑服务的部署,数据访问的安全性(用户名密码访问、X509证书加密、其他授权访问),数据响应以及错误处理等方方面面,如果是第一次接触,没有很好的指导及案例学习,可能消化相关的概念并理解,就需要一个不短的过程。
传统的WCF开发框架,由于是本地不缓存数据,实时通过WCF服务代理,向WCF服务请求数据,获取数据后进行显示的过程,开发思路相对比较简单,因此这种方式在很多WCF应用上,是比较常见的一种。
传统的基于Winform的WCF开发框架,界面可以和上面的Winform开发框架界面一样,不过它的获取数据的机制不同,它不是通过数据访问类访问本地的数据库,而是通过服务器公布WCF服务来获取不同数据对象,然后再Winform中进行展现,如下面是它的一个访问机制的示意图。
对于这个传统的WCF开发框架的架构,它其实是通过Winform的客户端WCF代理类,实现和远端服务器的WCF服务进行通讯,一般是基于Soap协议的XML格式,当然可以很好的配置加密机制,如X509证书加密,这样传输数据就比较安全,同时对于WCF服务,还可以采用基于自定义的用户名、密码的验证方式来有效提高WCF服务接口的安全性。以下是WCF开发框架的架构设计图,我们从中可以看出,它的应用程序的界面表现层是和WCF服务客户端代理层有关联,而代理层和WCF服务层有关联,这种隔绝了应用程序直接访问数据库的弊端,提高数据安全性,同时也使得应用程序实现了分布式的开发应用。
3、离线式WCF开发框架
相对于上面介绍的传统式WCF开发框架,这种离线式的WCF开发框架 ,就是结合了传统Winform开发框架的数据访问方式,又利用了WCF分布式数据获取的特点,使得数据可以离线使用,在一种业务要求集中化,又要求不影响正常业务操作的应用系统场景下比较适合,如我的送水管理软件网络版,就是利用这种模式,分店可以独立维护数据,没有网络也一样可以正常进行业务操作,但是在网络畅通的时候,可以向总店发送分店的数据,或者获取总店的公共数据。
这种离线模式的WCF开发框架,是一种对网络环境要求不高,既可以独立使用,又可以和总部发生业务数据往来的一种模式。这种场景下,如果不考虑数据同步及上传的情况下,他就是一个传统的Winform开发框架模式。
考虑数据同步,就会使得整个离线式的系统可能更加复杂,要求可能需要自身记录可能的数据变更(添加、修改、删除),还需要经常性的同步系统公用数据,如果要求同步的间隔比较短,那么我们就要多考虑一些因素。
离线式的WCF开发框架,数据存储我们一般选择单机版、方便部署复制的Sqlite数据库,或者Access数据库,在一些特别的情况下,才会选择比较大的SQLServer数据库或者Mysql数据库,由于WCF开发框架的应用客户端和服务器版本的数据库不同,如果没有比较弹性化、支持多数据库的WCF开发框架,这种开发模式,就会比较吃力繁琐。
离线式的WCF开发框架,一个特点就是基本上显示,以及保存等操作数据库的数据,都是本地的数据库,不是远端的服务器数据库,这样,就需要记录所有发生变更的数据库操作,包括写入,删除、修改等,以便在网络畅通的情况下,可以上传数据到服务器上面。
和上面第二点介绍的传统式WCF开发框架,这个就是多了一个本地数据库,这样可以提高数据的网络依赖性,其他日常操作的响应,在一些网络环境不经常连接的地方,可以很好的发挥作用,而且,通过实现把需要更新的数据导出到文件中,还可以实现数据的离线式同步,基本上可以完全独立于网络了。
这个模式的WCF框架架构图,是综合了Winform开发框架架构设计图和WCF框架架构设计图的特点,既有访问本地数据库的模块,也有访问操作WCF服务的模块,在不同的地方发挥不同的作用。
4、混合式WCF开发框架
除了以上几种,还有一种是可以在传统winform开发框架和WCF开发框架之间自由切换,这种其实用传统式WCF开发框架或者离线式WCF开发框架就可以解决,不过有些人觉得在局域网里面访问WCF服务,有点小题大做,而且性能也有一定的损失,那么就可以在界面调用具体操作数据类的时候,封装多一层,通过配置来指向WCF代理类还是Winform框架中的业务访问类,这种确实也可以实现的。
还有一种情况,就是把系统划分为很多万能模块(既适应WInform集成,也适应WCF集成),在不同的场合进行不同的开光切换,而且只是一个条件语句的跳转,就可以实现具体的切换,这样非常有利于模块的集成封装。
综上所述,我自己在各种项目的框架应用选择上,都是以最适合客户场景来进行选型,如一般的小型的业务管理系统,用Winform开发框架能快速给客户做好系统开发;而对于要求分布式的业务管理系统,工作的时候网络不成问题的这种,我一般就选择传统的WCF开发框架;而对于复杂的,网络不能保证的,要求分布式应用,数据集中管理的,一般采用离线式的WCF开发框架。如果为了更好开发集成模块,适应各种场景的集成,那么就可能要求模块具有混合式WCF开发框架的特点。
本文转自博客园伍华聪的博客,原文链接:Winform开发框架之框架演化,如需转载请自行联系原博主。