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

主要研究技术:代码生成工具、会员管理系统、客户关系管理软件、病人资料管理软件、Visio二次开发、酒店管理系统、仓库管理系统等共享软件开发 专注于Winform开发框架Web开发框架、WCF开发框架、微信门户开发框架的研究及应用。   转载请注明出处: 撰写人:伍华聪  http://www.iqidi.com 

Winform开发框架之框架演化的更多相关文章

  1. Winform开发框架之存储过程的支持--存储过程的实现和演化提炼(2)

    本篇继续上篇<Winform开发框架之存储过程的支持--存储过程的实现和演化提炼(1)>来对Winform开发框架之存储过程的支持进行介绍,上篇主要介绍了SQLServer和Oracle两 ...

  2. Winform开发框架之客户关系管理系统(CRM)的开发总结系列2-基于框架的开发过程

    在上篇随笔<Winform开发框架之客户关系管理系统(CRM)的开发总结系列1-界面功能展示>中介绍了我的整个CRM系统的概貌,本篇继续本系列的文章,介绍如何基于我的<winform ...

  3. Winform开发框架之插件化应用框架实现

    支持插件化应用的开发框架能给程序带来无穷的生命力,也是目前很多系统.程序追求的重要方向之一,插件化的模块,在遵循一定的接口标准的基础上,可以实现快速集成,也就是所谓的热插拔操作,可以无限对已经开发好系 ...

  4. 如何基于Winform开发框架或混合框架基础上进行项目的快速开发

    在开发项目的时候,我们为了提高速度和质量,往往不是白手起家,需要基于一定的基础上进行项目的快速开发,这样可以利用整个框架的生态基础模块,以及成熟统一的开发方式,可以极大提高我们开发的效率.本篇随笔就是 ...

  5. 基于Enterprise Library的Winform开发框架实现支持国产达梦数据库的扩展操作

    由于一个客户朋友的需求,需要我的Winform开发框架支持国产达梦数据库的操作,这个数据库很早就听过,但是真正一般项目用的很少,一般在一些特殊的项目可能需要用到.由于我的Winform开发框架,是基于 ...

  6. Winform开发框架中实现同时兼容多种数据库类型处理

    在很多应用系统里面,虽然一般采用一种数据库运行,但是由于各种情况的需要,可能业务系统会部署在不同类型的数据库上,如果开发的系统能够很方便支持多种数据库的切换,那可以为我们减少很多烦恼,同时提高系统的适 ...

  7. Winform开发框架之读卡器和条码扫描枪的数据接收处理

    在我们开发一些项目的时候,一般需要一些外围的设备进行数据处理,如ID/IC读卡器获取卡号.激光条码扫描枪.USB摄像头.USB方式的小票据打印机(POS打印机).USB来电录音盒.普通打印机等一系列附 ...

  8. Winform开发框架中实现多种数据库类型切换以及分拆数据库的支持

    在很多应用系统里面,虽然一般采用一种数据库运行,但是由于各种情况的需要,可能业务系统会部署在不同类型的数据库上,如果开发的系统能够很方便支持多种数据库的切换,那可以为我们减少很多烦恼,同时提高系统的适 ...

  9. Winform开发框架之介绍

    winform开发框架,尽量减少程序员在界面中的代码量和工作量,Model自动生成,界面以及控件自动生成,简单的逻辑自动生成.自动生成的界面已经实现简单逻辑增删改查功能. 其他开发框架都已经或多火烧实 ...

随机推荐

  1. MongoDB的C#驱动报错Server instance 127.0.0.1:27017 is no longer connected的解决方案

    使用C#的MondoDB驱动,一直没问题.结果最近,MongoCursor的ToList方法,取列表,总是报错 Server instance 127.0.0.1:27017 is no longer ...

  2. upc组队赛1 黑暗意志【stl-map】

    黑暗意志 题目描述 在数千年前潘达利亚从卡利姆多分离之时,迷雾笼罩着这块新形成的大陆,使它不被外来者发现.迷雾同样遮蔽着这片大陆古老邪恶的要塞--雷神的雷电王座.在雷神统治时期,他的要塞就是雷电之王力 ...

  3. 使用kubeadm 安装 kubernetes 1.12.0

    目录 简介: 架构说明: 系统配置: 1.1 关闭防火墙 1.2 禁用SELinux 1.3 关闭系统Swap 1.4 安装docker 使用kubeadm部署Kubernetes: 2.1 安装ku ...

  4. 永久修改VS include目录

    原文:https://blog.csdn.net/sysprogram/article/details/49214727 VS2008在选项里可以设置全局的Include目录和Lib目录, 但是VS2 ...

  5. Sql 通过表名查找所有列名

    SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'ImmediacyOutKu'

  6. B树,B+树比较

    首先注意:B树就是B-树,"-"是个连字符号,不是减号.也就是B-树其实就是B树 B-树是一种平衡的多路查找(又称排序)树,在文件系统中有所应用.主要用作文件的索引.其中的B就表示 ...

  7. Latex 三线表及设置列数

    参考: latex的三线表格及一些错误的修改 latex 三线表 Latex 三线表 及设置列数 绘制三线表: \begin{table}[htbp] \caption{\label{tab:test ...

  8. Use Memory Layout from Target Dialog Scatter File

    参考 MDK-ARM Linker Scatter File的用法(转载) keil报错 Rebuild target 'Target 1' assembling test1.s... linking ...

  9. ASP.NET MVC AntiForgeryToken

    你开发一个网站,其中有个功能:新闻发布. 你是这样实现的: 1.保存新闻的方法是:/News/Save  POST提交 2.接受两个参数:title和content 有一天,你登录网站(浏览器会保存相 ...

  10. python中常用的模块二

    一.序列化 指:在我们存储数据的时候,需要对我们的对象进行处理,把对象处理成方便存储和传输的数据格式,这个就是序列化, 不同的序列化结果不同,但目的是一样的,都是为了存储和传输. 一,pickle.可 ...