一种电子病历系统软件框架思想

袁永福 2016-5-9

电子病历系统到底采用B/S还是C/S架构是一个长期争论的话题。而在业界两种架构的应用范围谁也不占有显著优势。

在此笔者提出一种BS和CS混合的架构,以下是其原理图:

在该结构中主要部分有

WEB服务器

这是系统的核心。大多数的业务流程运行在WEB服务器中。采用ASP.NET开发,直连数据库。

WEB服务器包含系统功能 API集合,以远程调用的方式向PC客户端软件提供功能支持。

还包含ASPX页面,向移动设备提供功能支持。

PC机客户端

PC机客户端为一个轻量级的客户端软件,为一个.NET开发的WinForm软件。该软件提供良好的互换性操作体验,提供各种病历数据的查看、录入和打印功能。大多数情况下本软件只进行简单的数据转发功能,基本上不执行具体的业务流程操作。

移动设备

移动设备采用浏览器形式访问WEB服务器。

数据库服务器

为一个专门的数据库服务器,只向WEB服务器开放连接。

以下是B/S,C/S以及这种混合模式的对比评分表:

编号

对比项目

满分

BS

BS

得分

CS

CS

得分

BS和CS混合模式

混合模式

得分

说明

1

离线运行能力

3

无,若系统突然断网、服务器崩溃,数据全部丢失。

0

有,若系统突然断网,数据可以缓存到本地,联网后再保存。

3

2

用户辛苦敲入大段文本,突然断网了,心情不会好的。

2

页面状态数据

1

全靠ASP.NET SESSION,编程比较复杂。

0.5

控制简单,几个全局变量即可完成。

1

控制简单

1

 

3

页面间数据传输

1

全靠ASP.NET SESSION,编程复杂而且效率低。

0.5

简单,全局变量,公开的属性或字段就能实现该功能。

1

简单

1

 

4

浏览器兼容性问题

3

有,增加开发和维护难度和工作量。

0

3

3

严格限制客户端浏览器版本是一种不友好的行为,有时候会和其他软件发生冲突。应当尽量避免。

5

本地数据缓存

1.5

无,如果系统配置了知识库列表,药品信息列表,ICD数据列表,则需要频繁的重复下载。

0

有。无需频繁的重复下载。减少网络IO负荷和对服务器的依赖。

1.5

1.5

 

6

软件升级

5

简单,只要更新服务器软件即可。

5

必须要更新客户端软件,次数多,成本高,影响系统运行。

2

大部分情况下更新服务器即可。少数情况下才需要更新客户端软件。

3

目前的各种自动更新技术应该是够用的,而且电子病历是院内系统,有一定的控制力度。另外应该是以用户使用方便为第一,开发和维护人员自己方便为第二。

7

系统配置更改

2

简单

2

复杂

0

简单

1.5

比如数据库服务器换IP了。防火墙修改了。

8

运行速度

4

慢。网络传输速度和客户端浏览器呈现速度比较慢,一般操作都需要几秒钟的时间。

2

快,主要受限于网络传输速度。

4

快,主要受限于网络传输速度。

4

对于BS软件,可能服务器端运行耗时只有几百毫秒,但在网络传输和浏览器展现页面需要耗掉几千毫秒。

9

网络带宽利用效率

1

低,一般为明文原始格式传输

0

高,可以加密压缩传输。

1

高。

1

 

10

用户互操作体验

6

一般。

2

良好

6

良好

6

用户年复一年的操作这些界面,稍微减少些鼠标键盘操作就能产生显著的效益。另外一些病历模板工具等软件模块基本上只能用CS模式。

11

安全性

1

高。服务器软件控制好就行了。

1

低。

0.5

高。基本上等于服务器的安全性。

0.5

由于是院内系统,行政管理能帮助进行安全管理。

12

部署

5

简单。但是如果不得不出现IE嵌控件的形式,则很复杂。

4

复杂,需要配置客户端运行环境,配置数据库连接信息。

0

比较复杂。但无需配置数据库连接信息。

3

可能要用上医保接口,容易出现IE嵌控件的情况。

13

U盘,K宝等外接设备

2

复杂,需要仔细配置客户端运行环境,容易出错。

0

简单

2

简单

2

比如用上电子签章功能,医生人手一个K宝。

14

打印

2

难于做到精细打印。比如不弹出对话框的打印,指定打印机、纸盒,续打,双面打印等。

0.5

简单强大

2

简单强大

2

 

15

开发技术

4

复杂。需要C#/HTML/JS的混合编程。对开发人员要求高。调试操作复杂。

1

简单,统一的WinForm编程模式。

4

较为简单,ASP.NET和WinForm编程,编程语言统一。

2

开发人才难找,需要降低对开发人员的要求。

16

产品化

1

复杂。

0.5

简单,可以方便的制作安装文件和各种配置工具。

1

比较复杂。

0.5

既然以后要向其他医院推广,需要考虑到软件的产品化。

17

数据库负载

4

良好

4

差,需要创建大量数据库连接。

0

良好,不直连数据库。

4

 

18

灾难恢复

5

差,服务器宕机,所有客户端都不能用。

0

有一定的应付能力。

3

有比较弱的应付能力。

1

电子病历应该是7X24小时运行的系统。

19

对移动设备的支持

4

良好

4

0

良好,仍然提供WEB页面功能。

3

 

20

并发控制

1

1

一般

0.5

1

 

21

系统伸缩性

1

1

0

1

医院职工数比较稳定。

22

系统可扩展性

5

5

1

较好

3.5

医疗需求变更比较大,会比较频繁的调整的系统功能,对系统可扩展性要求比较高。

23

客户端硬件要求

4

要求低

4

有一定的要求

1

要求比较低

2

 

24

服务器端硬件要求

1

要求高

0

要求低

1

要求比较高

0.5

 

25

操作系统底层功能调用

2

无,HTML/JS权限很低。

0

2

2

某些情况下需要调用操作系统底层功能。比如不同病人的病历文本不能相互复制就需要直接访问系统剪切板。

26

国际化(多语言版本)

0.5

复杂

0

简单

0.5

简单

0.5

比如开发繁体中文版,英文版等等。

 

满分

70

BS得分

38

 CS得分

41

 混合模式得分

52.5

 

关于这种架构思想的来源,笔者长期做UI层开发,那么就从UI层开始说起。

现在所有的医疗软件都是图形化用户界面,对于C/S程序,写C#代码调用DrawString(),DrawLine(),DrawImage()之类的GUI API来绘制用户界面;而对于B/S程序是服务器端写代码输出HTML代码,然后发给浏览器让其解释这个HTML代码来“绘制”用户界面。

因此可以抽象出来看,程序猿都是花大量的代码来绘制图形化用户界面,只不过一部分代码输出图形绘制指令,一部分代码输出HTML代码。但最终目的都是一样的。

另外程序猿还需要写大量的代码来让图形化用户界面和用户互动,都需要响应KeyDown/MouseClick等事件,这点大家的写的代码都很类似。最终目标也一样。

按照这种思想,B/S和C/S的理解可以如下:

C/S程序

数据库服务器→应用软件→界面呈现信息(DrawString等指令)→GUI For Windows

B/S程序

数据库服务器→应用软件→界面呈现信息(HTML代码)→GUI For Browser

两者逻辑上的高度相似性可以很容易联想到物理学中引力和电磁力逻辑上的高度相似性。物理学中正在谋求统一场理论,那么我们也可以谋求B/S和C/S的统一。

虽然B/S和C/S呈现用户界面的代码虽然语言不同、代码执行的地方不同,但逻辑是相同的,因此逻辑上完全可以统一起来。以此类推,对于业务逻辑执行也是这样的,这就是B/S和C/S统一的理论基础,具体表现形式可以是OOP、AOP之类的。

按照B/S,C/S的统一设想,电子病历系统软件可以划分为以下几个部分:

  1. 数据库服务器。SQL SERVER/ORACLE/NOSQL之类的。
  2. 业务逻辑执行层。执行医疗业务逻辑的代码,这个层面纯粹执行业务功能,没有用户界面。而且考虑到B/S应用应该是多线程安全的。
  3. B/S服务器应用层。运行在WEB服务器上的,直接调用业务逻辑执行层来实现业务功能。
  4. 远程调用包装层。对业务逻辑层执行层的功能进行包装,能方便的进行远程调用,这个远程调用就是基于XML的WebService或者基于二进制的JAVA/.NET Remoting。
  5. C/S客户端软件。客户端软件通过网络调用远程调用包装层来执行业务逻辑。

对于这种架构模型,如果业务逻辑执行层和B/S服务器应用层编译在一起就是传统的B/S系统;业务逻辑执行层和C/S客户端软件编译在一起就是传统的C/S系统。如果5个部分都分开,那么就是同时支持B/S和C/S的,这样软件具有强大的扩展性和生命力。

回归到笔者的老本行,电子病历编辑器。编辑器控件提供WinForm版本和ASP.NET版本的。WinForm版本支持所有的功能;不过受限于当前技术水平,ASP.NET版本只能只读的阅读病历文档内容,而无法编辑修改。因此建议在开发常规电子病历系统时采用C/S模式,对于互联网应用,比如公卫平台之类的,也是建议新的B/S和C/S统一模式。对于移动应用可以采用传统B/S模式。

最后想总结一下,孙子兵法又说了:兵势如水。小平同志的白猫黑猫也是这个理。笔者觉得开发软件也应该“兵势如水”,不必拘泥于B/S,C/S之类的条条框框。怎么适合需求就怎么做,灵活变幻开发策略,以最优的路径做出符合客户需求的软件。

一种电子病历系统软件框架思想相关推荐

  1. 一种电子病历系统软件框架思想——B/S与C/S混合架构

    电子病历系统到底采用B/S还是C/S架构,是一个长期争论的话题.而在业界,两种架构的应用范围谁也不占有显著优势.在此,笔者提出一种B/S和C/S混合的架构,以下是其原理图. B/S和C/S混合架构原理 ...

  2. 智慧医院建设背景下的电子病历分析利用框架

    点击上方蓝字关注我们 智慧医院建设背景下的电子病历分析利用框架 徐良辰, 郭崇慧 大连理工大学系统工程研究所,辽宁 大连 116024 摘要:作为核心的医疗大数据,电子病历成为智慧医院建设的基础,对电 ...

  3. 大型EMR电子病历源码三甲医院医疗信息管理系统软件网络版

    详情请点击查看 开发环境 :VS2010 + C# + ORACLE 系统简介: 1各种记录的书写,并可保留修改痕迹 在各种记录的书写过程中,根据系统提供的首次护理记录.一般护理记录.术前术后护理记录 ...

  4. python爬取电子病历_一种基于中文电子病历的实体识别方法技术

    本发明专利技术提供了一种基于中文电子病历的实体识别方法,涉及医疗实体识别技术领域.针对目前国内缺少公开中文电子病历标注语料库的缺陷,本发明专利技术通过构建整理医学词典,提出了一种半自动语料库标注方法, ...

  5. 【计算机毕业设计】323电子病历系统

    一.系统截图(需要演示视频可以私聊) 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟.本文介绍了电子病历系统的开发全过程.通过分析电子病历系统方面的不足,创建了 ...

  6. Springboot电子病历管理APP毕业设计源码010350

    摘 要 本文针对电子病历管理等问题,对其进行研究分析,然后开发设计出电子病历管理APP以解决问题.电子病历管理APP主要功能模块包括:病历管理.在线医生列表.病人挂号.医药处方费管理等,采取本系统此次 ...

  7. (附源码)springboot电子病历管理APP 毕业设计 010350

    Springboot电子病历管理APP 摘 要 本文针对电子病历管理等问题,对其进行研究分析,然后开发设计出电子病历管理APP以解决问题.电子病历管理APP主要功能模块包括:病历管理.在线医生列表.病 ...

  8. 基于c# asp.net电子病历管理系统的设计与实现

    摘  要 网络的广泛应用给生活带来了十分的便利.所以把电子病历管理与现在网络相结合,利用net语言建设电子病历管理系统,实现电子病历管理的信息化.则对于进一步提高医院的发展,丰富电子病历管理经验能起到 ...

  9. (附源码)Springboot电子病历管理 毕业设计 010350

    Springboot电子病历管理APP 摘 要 本文针对电子病历管理等问题,对其进行研究分析,然后开发设计出电子病历管理APP以解决问题.电子病历管理APP主要功能模块包括:病历管理.在线医生列表.病 ...

最新文章

  1. travis-ci如何配置android
  2. Centos7.4安装kvm虚拟机(使用virt-manager管理)
  3. 成都网络推广带大家了解一个好的标题需遵循的原则有哪些?
  4. 网站建设全阶段培养共分三期
  5. pip install python -32_pip安装python模块方法
  6. TEG《选择》乘风破浪 · 披荆斩棘
  7. P5325-[模板]Min_25筛
  8. 1006 换个格式输出整数 (15分)
  9. 一台微型计算机性能的主要参数及其意义,微型计算机的主要性能指标.ppt
  10. 数据结构2 - 线性表
  11. c语言会生成class文件,一文带你刨析class文件
  12. OpenCV学习(14) 细化算法(2)
  13. 中位数±四分位数表达_Python数据分析:强大字符串处理工具,正则表达式
  14. Mac如何简单的翻录3D蓝光视频
  15. Divide Two Integers leetcode java
  16. 如何在Vue项目中使用vw实现移动端适配
  17. matlab自适应遗传算法代码,matlab自适应遗传算法
  18. 动画中英文对照表(09.24)
  19. 上海行政区划经纬度地图_全国行政区划2017省市区完整版附经纬度及拼音
  20. 长江大学计算机地质绘图,石文油气藏地质智能绘图系统

热门文章

  1. 《Greenplum企业应用实战》一导读
  2. 不仅是 64 位 Android L 还有这 9 大亮点
  3. C++学习笔记24,方法重写与方法隐藏
  4. 最牛X的GCC 内联汇编
  5. 转: linux下的自动对时
  6. Oracle 用户表空间的创建和授权
  7. 对10个整数按由大到小顺序排序
  8. Mono for Andriod学习与实践(1)— 初体验
  9. 25个别出心裁的简历设计作品欣赏
  10. arcgisserver修改服务器地址,ArcGIS for Server默认端口6080修改