传统C/S软件的"断骨增高"
前言:
由于院内临床业务需要高频强功能的用户界面互操作性要求,使得在HIT行业中存在大量的C/S型软件,尽管B/S软件应用范围正在扩大,但在很多场景中,C/S软件仍然顽强的生存和发展着。
不过随着行业软件开发技术水平的提升,传统的C/S的软件,也就是客户端程序直接连接数据库的模式越来越显得过时和不符合需求了。此时需要对这些C/S软件进行升级。这些C/S软件是各种开发组织(软件公司和医院信息科)花费数万人月完成的,是不可能一下子替换的,只能渐进的升级。
C/S+Web Service混合模式:
目前比较常见的模式就是C/S+WebService的混合模式。
C/S+B/S混合模式就是建立一个WEB服务器,开放大量的Web Service接口,然后让C/S客户端软件调用。WEB服务器直连数据库,而C/S客户端程序不再直接连接数据库。这样的好处主要有:
1.客户端仍然保留C/S软件具有的高频强性能的用户界面互操作性的要求。
2.客户端不用直连数据库,避免客户端的数据库配置操作,降低实施工作量。
3.只有WEB服务器直连数据库,降低系统中数据库连接数量,减轻数据库服务器的负荷。
4.一些业务功能的更新只需要更新WEB服务器程序,Web Service接口保持不变,降低更新客户端程序文件的概率,这有利于运维。
不过这种混合模式加大了开发工作量,主要有
1.WEB服务器需要频繁的定义和修改Web Service。使得客户端程序需要频繁的更新WEB引用,需要两头修改代码。导致客户端软件的重新编译和部署。
2.调试不方便,在调试客户端程序时断点进入到WEB服务器程序中比较麻烦。单步调试不能一通到低,本来使用方便的“编辑并继续”等调试手段无法使用。
在现代软件项目中,软件开发和调试工作量(包括公司内部开发和驻场开发)占据了整个工作量的很大的一部分。很多项目的失败是源自软件开发不力。因此降低开发工作量和工作时间有利于保障项目按时完成,让开发组织的利益最大化。
“断骨增高”模式:
为了比较稳妥的升级C/S软件为混合模式,并能方便的开发和调试,在此笔者提出了对传统C/S软件进行“断骨增高”的手段进行升级。
“断骨增高”原本是一种医学手术。是根据肢体组织在一定应力刺激下再生的生物学原理,应用骨科截骨术,在小腿或大腿把已经闭合的骨生长线重新“打开”,并在体外安装一种具有牵伸作用的肢体延长器,根据每个人组织再生能力和特点,每天以0.5毫米至1毫米的速度将肢体缓慢地延长。
而笔者将利用一种透明代理的软件技术,对传统的C/S软件进行模块整理、内部分层,然后软件模块分裂,但仍然保持软件模块之间的调用关系,将传统的C/S软件改造成B/S,C/S混合模式的软件。让传统软件重新焕发活力,延长系统寿命。其原理如下:
首先传统的C/S程序结构如下:
这种结构下,UI模块、业务逻辑模块、数据库处理模块相互纠缠,到处都有直接访问数据库的代码,混乱不堪。
为此,我们需要首先改造,整改之后的程序结构如下:
这种结构下,UI模块、业务逻辑模块、数据库处理模块之间分离比较清晰,只有数据库处理模块才能直接连接数据,其他模块尽量少的连接数据库。
不过考虑到实际情况,不能要求太高,但底线是UI模块必须分离开来,业务逻辑模块和数据库处理模块不能低成本的分离开来那也能凑合着继续,但是UI模块绝对不能直接连接数据库。UI模块不能清晰分离出来,后续操作也就无法执行了。
对C/S软件的内部功能模块分层后,这时候我们就用到一种叫透明代理的机制。在.NET开发中就是调用类型System.Runtime.Remoting.Proxies.RealProxy中的功能。原理图如下:
其工作步骤如下:
1.透明代理客户端针对业务逻辑模块或数据库处理模块这些底层功能模块创建透明代理对象,并将透明代理对象替换掉真正的底层功能模块推送到UI等上层模块前面。
2.上层模块是无法区别透明代理和真实的功能模块,因为两者具有相同的函数签名,并能进行类型强制转换。
3.当上层模块调用透明代理的成员函数时,透明代理客户端会立刻截断函数的调用,将函数名和参数值二进制序列化成一个数据包,然后通过HTTP协议发往WEB服务器的透明代理服务器端模块。
4.WEB服务器接受数据包,进行二进制反序列化,获得其中的模块名、函数名和参数值。然后创建相应的功能模块并调用其函数。在ASP.NET开发中就是调用System.Runtime.Remoting.RemotingServices类型的ExecuteMessage()方法。
5.在WEB服务器端内部真实的功能模块运行后得到的结果返回给透明代理服务器端,然后被二进制序列化生成一个数据包,然后作为HTTP响应发送给透明代理客户端。
6.透明代理客户端接受到的数据包并进行解析,生成返回值,然后返回给上层功能模块。上层功能模块就能欢天喜地的拿到数据进行后续处理了。
在这种模式下,为了部署和维护方便,我们可以让客户端和服务器端使用一样的程序文件。客户端虽然加载了底层功能模块,但这些模块是废弃不用的;而服务器端加载了UI层等上层模块,也是废弃不用的。不过这些都不影响整个系统的使用。通过这种模式,我们实现了传统C/S软件的断骨增高。实现了一种分布式运算,大大提高C/S软件的灵活度和伸缩性。
而且这种模式下,更改底层功能模块只需要改一处,不需要两边同时更改,降低工作量。
另外这个过程统一了数据传输通道,可以很方便的加上自定义的数据验证、压缩和加密。而实现自定义的Web Service传输过程比较复杂。
更进一步的,经过灵活配置,可以让C/S软件同时支持透明代理远程调用和真实的本地调用。以下是客户端不采用透明代理而使用本地真实功能模块的情况。此时WEB服务器是停用的。而且客户端是直连数据库。
这种模式是非常适合软件开发和调试过程的。可以单步调试一通到底,“编辑并继续”也能随时执行。
这样我们的软件具有开发模式和运行模式。开发模式非常适合程序员的软件开发和调试过程;运行模式适合生产环境下的运行,具有强大的伸缩性和可维护性。两头都方便,按需配置,有利于快速开发和部署。
推广:
这种技术方案的推广也会对整个HIT行业带来巨大的利益。业界已经运行着大量的C/S软件,它们是各种开发组织投入数万人月编写数千万行的代码,并和用户一起历经数年时间反复磨合而得到的。这些软件凝聚了客户大量的投资,不能随便抛弃。
而我们可以采用“断骨增高”来改良这些C/S软件,在无需重大修改的情况下显著增加软件的可伸缩性和可维护性,重用历史代码,大幅延长软件的运行寿命,保护客户投资,创造巨大的经济效益。
我们都昌公司专门进行底层技术研究和输出,研制出“断骨增高”这种非常接地气的技术方案,然后反复重构优化和产品化,并制定一套开发指南,然后融入到“都昌赋能框架”中,可以针对所有基于.NET平台的C/S程序进行优化,帮助开发组织利用已有技术力量开发出高度可伸缩性和可维护性的软件,增强解决问题的能力,提高市场竞争力。
传统C/S软件的"断骨增高"的更多相关文章
- 密信(Mesince)首创全自动邮件加密,颠覆传统邮件加密软件
电子邮件泄密已经成为一个全球性的日益严峻的安全问题,解决这个问题的唯一有效办法就是电子邮件内容先加密后发送.然而,使用基于S/MIME标准的传统邮件加密软件进行邮件加密,需要用户具备一定的技术基础.用 ...
- 传统软件和SaaS,差异究竟在哪里
这篇文章从创业起步阶段.产品形态和产品策略.市场竞争格局三个方面比较了中美 SaaS 领域的异同,在文章的最后,作者根据自己在 Box 的工作经历对在国内做 SaaS 的公司提出了四点建议. 我曾有幸 ...
- 工作流软件是未来web的支柱
Web 3.0正在敲门,但是开门的人你永远都想不到:工作流软件. 传统上工作流软件是企业级的业务流程管理工具,但现在随着网络互联程度的加深,工作流软件开始呈现出其作为互联网技术的一面. 诚然,社会化媒 ...
- (转)Salesforce的440亿美金并购宣告企业软件市场进入3.0互联网化时代
导语:Salesforce代表着“移动+云”时代企业软件领域新的架构和商业模式的颠覆者.企业软件转向“移动+云”架构,将极大改变传统企业IT市场的格局…… 近期一则新闻极大的刺激了企业软件市场的神经, ...
- 工作流软件如何成为未来web的支柱
此文作者是 Kevin Lindquist,工作流平台Decisions的营销负责人,原文发表于VB上. Web 3.0 正在敲门,但是开门的人你永远都想不到:工作流软件. 传统上工作流软件是企业级的 ...
- 花了一年时间开发的三维弯管机交互式转档软件(三维管子模型UG,SOLIDWORK,PRO/E文件转成YBC)
在弯管机加工中,由管子模型生成可直接进行弯管加工的YBC数据可以大大提高弯管编程过程.传统的做法是先用dxf数据文件(用autocad绘制管子的轴心线数据)转出XYZ数据,然后由XYZ数据转成YBC数 ...
- 360安全中心:WannaCry勒索软件威胁形势分析
猫宁!!! 参考链接:http://zt.360.cn/1101061855.php?dtid=1101062360&did=210646167 这不是全文,而是重点摘要部分. 2017年5月 ...
- BPM软件_财务报销流程管理解决方案_K2工作流引擎
财务报销,对任何企业都是日常运营中重要的一个环节.但报销流程周期长,反复签字手续繁杂,报销过程不透明 ,单据归档保存.检索困难等问题也让员工头疼.为了解决这些困扰,财务报销流程电子化一时成为热门之选. ...
- 分享一款免费的工控组态软件(PCHMI)
PCHMI严格的讲它并不是一款组态软件,也不是一款SCADA软件,而是一个基于.NET构架的DLL文件,开发者可以使用微软的Visual Studio将PCHMI.DLL加载到工具箱里面进行二次开发. ...
随机推荐
- 流式大数据计算实践(6)----Storm简介&使用&安装
一.前言 1.这一文开始进入Storm流式计算框架的学习 二.Storm简介 1.Storm与Hadoop的区别就是,Hadoop是一个离线执行的作业,执行完毕就结束了,而Storm是可以源源不断的接 ...
- 30.C++复习篇
本章学习内容: 1.const 2.指针const 3.inline内联函数 4.函数重载 5.extern “C” 6.new/delete声明与释放 7.namespace命名空间 8.C++中的 ...
- Spring学习心得--------bean-Factory
在学习Spring框架的过程中发现,Spring中的bean不仅是对javabean的一种封装,让你可以通过beanfactoryAPI读取自己配置的beans.xml文件来实现javabean的设置 ...
- Android Studio 学习(七)通知
导入support- -v4 1.进入 file-project structure 2.左边选择app 3.右边选择dependencies 4.左下角可以看到一个加号,点击选择Library de ...
- java框架之mybatis
一.简介 1.基本概念 mybatis 是一个半自动轻量级的一个 orm 框架 将 java 与 sql 分离,解决了 jdbc 的硬编码问题: sql 由开发人员控制,更加方便 sql 的修改调优: ...
- 介绍Dynamics 365 Performance Center
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复257或者20170517可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- 利用自定义View实现扫雷游戏
游戏规则: 简单版的扫雷事实上就是一个9×9的矩阵,其中有十个点是雷,非雷方块的数字代表该方块周围八个方块中雷的个数.通过长按某一方块(方块会变红)认定该方块为玩家认为的雷,通过短按某一方块来“展开” ...
- 使用Connector/C++(VS2015)连接MySQL的完整例子
完整示例代码1 /* Copyright 2008, 2010, Oracle and/or its affiliates. All rights reserved. This program is ...
- ORA-00904: "WMSYS"."WM_CONCAT": invalid identifier
同事玩Docker,在Docker里面启了一个Oracle 10g Express版本,在测试过程中遇到了ORA-00904: "WMSYS"."WM_CONCAT&qu ...
- 26个ASP.NET常用性能优化方法
数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源. ASP.NET中提供了连接池(Co ...