Winform开发框架演化历史

开发 后端
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开发框架的特点。

原文链接:http://www.cnblogs.com/wuhuacong/archive/2012/11/19/2769052.html

【编辑推荐】

  1. WinForm设置用户控件的按钮事件
  2. Winform框架之字典数据管理
  3. Winform开发框架之同化对话框样式
  4. 详解WinForm窗体间交互的方法
  5. WPF与WinForm对比谈 多线程编程优化是关键

责任编辑:彭凡 来源: 博客园
相关推荐

2015-09-23 14:14:47

LinkedIn架构解析

2012-08-21 11:26:17

Winform

2013-04-23 09:31:12

Winform开发框架

2012-12-11 10:15:02

Winform开发框架

2011-11-23 09:47:36

Winform

2009-08-20 09:30:03

C#开发WinForm

2009-08-20 10:24:52

C#开发WinForm

2009-10-13 11:32:19

Winform假框架

2011-11-14 10:41:15

Winform数据管理模块Items

2009-08-19 09:40:57

软件方法论

2012-07-30 09:32:00

Web

2009-04-13 09:23:41

.NET 2.0Winform经验

2023-03-06 16:44:41

编程语言开发编码

2018-05-25 16:32:45

Spring BootJava开发

2009-09-11 10:41:20

C# WinForm控

2013-03-11 10:10:03

2009-07-24 10:41:00

asp.net mvc

2021-03-16 06:38:44

架构分层插件化

2017-04-11 15:43:39

JavaScript模块演化

2009-04-01 16:26:06

LabelWinFormC#
点赞
收藏

51CTO技术栈公众号