低代码技术在医院的应用与思考
近年来,低代码这一概念在医疗信息化领域频繁出现。那么,低代码究竟是什么?它因何而生?在医院信息系统建设与运维中,低代码技术又有哪些适用的应用场景?对于用户而言,低代码技术又存在哪些有待改进之处呢?
一、低代码开发技术概述
在传统应用开发模式下,程序员的主要职责是编写大量代码以满足业务需求。如果存在一种技术,能够在不降低业务需求完成度的前提下,减轻软件开发人员的工作负担,甚至将部分开发工作转移给用户,那么这种技术无疑会受到广泛欢迎。低代码开发技术的出现,正是基于这样的初衷。
(一)定义
低代码(Low - Code),顾名思义,即通过极少的代码量或无需编写代码来实现大量代码的功能。2014年,著名研究机构Forrester为解决软件开发过程中大量重复性工作的问题,首次提出了低代码的概念。它是一种能够利用很少或几乎不需要写代码就能快速开发应用,并且可以快速配置和部署的技术与工具。
在现实世界中,系统的复杂性所代表的熵不会凭空消失,为了实现代码量“少即是多”的目标,低代码技术应运而生,其核心是将复杂性转移到工具内部,为开发者提供更简单、更便捷的开发环境。
低代码开发平台(Low - Code Development Platform,LCDP)是一组基于可视化图形界面与参数化配置方式进行应用开发的工具。与传统的集成开发环境(Integrated Development Environment,IDE)相比,它具有人工编码量更少、专业性要求更低、学习曲线更平滑、开发效率更高等显著优点。
自2015年起,微软、谷歌、亚马逊等国际科技巨头纷纷涉足低代码开发领域;2018年,国内的腾讯、百度、阿里巴巴等互联网企业也陆续推出了各自的低代码平台;2020年后,越来越多为大型企业提供信息化服务的软件开发商开始尝试采用低代码开发平台,以打造技术门槛更低、开发效率更高的新模式。目前,低代码技术的应用案例已经广泛覆盖了通信、金融、制造、政务、能源、交通等多个行业。
(二)核心功能
低代码开发平台的核心目标是降低应用开发的准入门槛,使开发者能够借助图形化界面,通过拖拉拽等操作,以“搭积木”的方式快速构建软件应用,从而减少重复的基础搭建工作。
其核心功能主要包括以下几点:
- 可视化设计器:这是一种通过图形界面进行设计、创建和定制各种应用程序元素的工具。它涵盖了表单设计器、工作流程设计器、门户设计器、规则设计器、用户界面设计器和数据可视化设计器等多个方面,为开发者提供了直观、便捷的设计体验。
- 核心引擎:这是低代码的关键技术所在。通过对核心引擎复杂性的封装,低代码开发平台能够简化开发流程,提高开发效率。核心引擎主要包括流程引擎、规则引擎和表单引擎等,它们为应用开发提供了强大的技术支持。
- 快速应用创建:低代码开发平台通过一系列开发与运维工具,实现了更高效率地开发完整应用或进行增量迭代。它提供了业务建模、组件管理、应用管理、用户与权限管理等通用能力,满足了应用在开发运行过程中的各种需求。
- 适配微服务与云原生:低代码开发平台通常具备DevOps一体化的能力,包括自动化打包、配置、发布等功能。它能够生成基于微服务架构的可扩展应用,并且可以方便地部署到云原生环境中,满足了现代应用开发与部署的需求。
(三)应用场景
软件工程通常将一个应用软件的生命周期划分为分析、设计、开发、测试、部署、运维等阶段。低代码开发平台在软件生命周期的各个阶段都能发挥重要作用。
在分析阶段,低代码开发平台可以提供可视化工具,帮助系统分析人员更清晰地定义需求,快速搭建原型以验证概念。通过可拖拽组件的方式,分析人员可以轻松搭建流程图或用户界面草图,从而更好地理解需求并进行讨论。
在设计阶段,低代码开发平台通过可视化的界面进行建模,创建数据模型和领域模型等,能够准确地描述各类模型定义及其相互关系。同时,它还提供了内置可拖拽的组件,方便开发者进行前端用户界面设计。
在开发阶段,低代码开发平台具备强大的数据报表能力,支持各类数据报表的可视化设计,并且可以直接对接底层数据库。它还具备前端组件库与二次开发能力,即使开发者不具备丰富的前端知识,也能够快速生产业务组件,实现页面模块的拆分和逻辑的复用。此外,低代码开发平台还具备模型驱动和API驱动能力,通过对接底层数据库或前后端API服务接口等,能够快速生成数据与业务模型、标准场景页面及对应的服务,从而显著提升研发效率。
在测试阶段,低代码开发平台通过可视化环境配置管理,帮助测试人员迅速搭建测试环境。同时,它还能够自动生成可视化测试流程与测试脚本,全程追踪测试进度与测试结果,提高了测试工作的效率和准确性。
在部署阶段,低代码开发平台提供了一键式部署能力,能够实现云平台的快速部署。此外,它还提供了应用管理能力,可以实时监控应用的运行状态,确保应用的稳定运行。
在运维阶段,低代码开发平台提供了仪表监控面板,实现了对应用性能和用户活动的可视化管理。各类维护与升级操作都可以直接在可视化界面上完成,大大降低了用户的操作难度,提高了运维效率。
二、低代码在医院的主要应用场景
(一)作为成熟的HIS开发工具
在当前的医疗数字化领域,尤其是医院信息系统(Hospital Information System,HIS)中,由于其涉及范围广泛、业务流程复杂、系统间缺乏互操作标准,目前市场上几乎没有低代码开发平台能够完全支撑广义HIS软件的全生命周期开发。然而,我们已经看到,许多低代码开发工具在部分业务场景中发挥了重要作用。
1. 办公类应用
医院中有很大一部分管理工作具有相似的需求,如填报表单、流转审批和抄送归档等。这些工作的特点是模型独立、流程明确、规则简单。低代码开发平台在搭建这类办公自动化应用时具有明显的优势。
首先,平台内置了大量的表单模板,对于简单的办公类需求,只需对模板进行少量扩展即可满足。其次,模板即模型,平台可以根据模板生成前台原型页面,相当于为开发过程提供了一个明确的目标,避免了开发过程中甲乙双方“空对空”的交流,从而确保了需求沟通的质量与准确性。再次,平台可以根据模板生成后台服务和数据库表结构,并通过一键部署功能实现整个应用的快速上线。最后,低代码开发平台还提供了对本平台“原生”应用的监控和管理功能,使得运维人员能够无缝对接并快速上手。
例如,在新冠疫情期间的疫情防控填报系统、医院日常公文流转系统和医护人员请销假管理审批系统等,都可以通过低代码开发平台快速搭建实现。
2. 报表类应用
各类报表是医院日常管理运营不可或缺的数据支撑。通常,每所医院都会根据上级考核标准和自身特色需求进行大量的报表定制工作。随着医院对高质量发展的不断追求,以及各类行业监管、纪检审计等工作的要求,对报表的精细化程度、灵活性和实时性都提出了更高的要求。
低代码开发平台在面对上述非事务性的数据查询统计需求时,提供了可视化的表格编辑界面,类似于Excel的数据透视表。用户可以自定义复杂的行列表头、字段绑定、显示格式、关联图表,以及数据汇总计算公式等内容。通过数据访问适配层,平台能够实现对各类数据库的支持,从而降低了开发门槛,提高了开发效率,解决了报表生成与打印中的个性化与灵活性问题。
例如,医院的医疗质量监控报表和各类运营日报、周报、月报等,都可以通过低代码开发平台搭建实现。
3. 门户与大屏类应用
在不同的场景下,医院需要展示不同的门户与大屏信息,以满足不同层级用户对数据的需求。低代码开发平台提供了组件化可拖拽的大屏设计器,用于构建和管理医院及各类应用的门户与大屏。
低代码开发平台预置了模块、卡片、列表、表格、图表等各类组件,允许用户自定义页面的布局、样式和内容,包括添加、移动或删除各种组件。用户可以根据需求配置门户和大屏的外观和功能,使其适应特定的业务流程或需求,最终实现所见即所得的效果。
例如,医院门户网站、各类工作站门户、院长驾驶舱大屏、智慧运营大屏和智慧运维大屏等场景,都可以通过低代码开发平台搭建实现。
4. 集成平台
集成平台通常为医院信息系统提供开放接入、协议转换和服务编排等功能。目前,大多数商业集成平台已经具备可视化的操作界面,并且具备完备的API接口访问和连接能力。从某种程度上讲,集成平台本身就可以看作是低代码开发平台的一部分。实际上,很多集成类的低代码开发工具都提供了API开发能力,支持从零开始,通过可视化与配置方式定义API输入输出的数据对象,实现基于数据模型或遗留系统的API开发。
5. 二次开发
HIS作为一个庞大而复杂的企业应用,很难抽象出完全相同的模式。一般情况下,HIS软件供应商在完成核心业务系统开发后,还需要进行客户定制化适配与改造。这个阶段的工作包括医院特色业务流程定制开发、硬件适配、打印与报表格式定制、与三方系统集成、系统参数配置与字典初始化等内容。
在传统开发模式下,这个阶段的工作主要由HIS软件供应商的实施团队完成,医院信息科则进行指导与辅助。然而,基于低代码开发平台,医院信息科人员能够充分发挥主观能动性。即使在技术水平达不到传统编码开发要求的情况下,他们依然能够深度参与其中。能力强的信息科甚至可以主导整个定制化开发过程。
此外,对于一些边缘业务,特别是对完成时间节点要求较高的应用,医院可以借助低代码开发平台自行开发,而不必凡事都依赖乙方。可以说,低代码开发平台为医院软件开发和运维工程师提供了实现“自主可控”的巨大空间。
(二)作为传统HIS开发平台的补充
在HIS核心业务系统开发过程中,由于流程复杂、遗留系统众多、生态环境匮乏,现阶段仍以传统开发方式为主。低代码开发平台还无法完全替代Visual Studio Code、Eclipse、IDEA等传统IDE。
然而,在实际开发中,两者并不是非黑即白、水火不容的关系。许多低代码开发技术能够帮助开发人员大幅提高效率,其输入结果(通常是代码)可以作为传统开发工具的输入。低代码开发平台通过用户友好的图形界面,完成建模、编排等操作。可视化元素背后对应一套领域特定语言(Domain Specific Language,DSL),并且DSL支持到传统IDE及编程语言的单向或双向映射。
例如,在采用领域驱动设计的经典模式开发HIS时,在设计阶段,通过可视化建模,一方面可以完成限界上下文的划分,建立领域模型、领域事件、领域服务等,并由模型生成DSL代码,再由DSL生成Java、C#、C++等编程语言代码,供后续开发阶段直接使用;另一方面可以完成数据模型创建,生成Schema和表等数据库对象的描述,再通过适配器实现各类SQL方言,支持在不同数据库中直接执行。
在开发阶段,将领域模型和服务作为标准化组件,通过可视化拖拽等方式,进行应用层的服务业务流程编排,同时完成应用服务层的API管理工作。在前端开发过程中,支持通过可视化的拖拽方式将UI元素和复杂组件进行组合与布局,搭建前端表单和页面界面,甚至可以提供运行时设计(Design at runtime)让用户自行完成操作。无论前端还是后端,用户都可以在设计开发完成后通过一键发布功能,将应用推送到基础设施层中进行持续部署。在整个开发过程中,低代码开发工具依赖标准化“组件”,在组件之上进行开发部署,为软件开发和运维人员提供了极大的便利。
三、几点思考
(一)不足之处
低代码技术具有两方面的作用:一方面,它能够为程序员减负,减少程序员的重复性工作,降低人工编写的代码量;另一方面,它降低了开发门槛,将一部分开发工作交由非专业技术人员(通常是系统用户)完成,帮助用户自主完成新需求的开发。
然而,我们也应该看到,和其他技术一样,在软件工程领域并没有所谓的“银弹”,低代码开发技术也不例外。
1、业务复杂性与技术局限性:
低代码开发平台在一定程度上能够解决技术复杂性的问题,但在业务复杂性方面,仍然需要依赖用户自身的领域知识与专业素质来解决。大多数低代码平台对于分布式事务的支持有限,同时缺少业务维度的监管工具。对于由多个异步服务组装而成的业务,缺乏完整的流程管理手段。例如,虽然有些低代码开发平台提供了建模工具,并内置了一部分医疗行业通用的领域模型,但对于模型的定制化扩展和对领域服务的流程编排,仍然需要具备丰富经验的领域专家介入才能完成。
2、复杂业务场景的局限性:
低代码开发平台依赖的组件化核心技术,在一定程度上能够支撑单表或简单关联关系的多表操作。对于一般的业务需求,可以通过流程引擎、规则引擎完成。然而,面对非常复杂的业务以及高度定制化的场景时,通过可视化组件进行拖拽反而会事倍功半,不如编写额外的代码进行实现更容易。换言之,低代码平台存在片面追求提高应用开发效率,却造成用户使用效率降低的情况。
例如,使用低代码工具拖拽一个工作站的前端登录界面,虽然外观基本符合要求,但对于需要极高操作效率的医护人员而言,低代码搭建出的应用能用但未必好用。诸如按回车键进行登录、如果用户名未填写则输入焦点定位到用户名文本框、如果口令未填写则定位到口令文本框、如果用户名不存在则跳转到用户名文本框并全选所有字符、如果口令不存在则跳转至口令文本框并清空所有字符、如果无使用权限则展示提示信息、如果错误三次则锁定输入或增加验证码等细致入微的交互,大部分情况下仍需要手写代码。
3、性能差距:
由于低代码开发平台存在片面追求提高开发效率的可能,其搭建的应用与开发人员完全手工编码并优化的应用相比,在性能上可能会存在差距。原因主要有两点:一是低代码开发平台必须考虑跨平台与兼容性,会增加适配层,进而增大开销;二是低代码开发平台面向组件搭建,为保证稳定性,组件间必须保证隔离,进而放弃了大量数据关联性。
例如,低代码组件生成的医疗质量管理监控大屏,通常由一组可视化组件搭建而成,每个可展示的组件都关联到后台一个独立的模型或一条独立的SQL语句。组件的原子化特性决定了彼此之间很难关联。而在手工编写代码时,一些计算的中间结果可以多次复用,类似于计算机体系结构中的缓存概念,减少了“重复”命令执行次数,从而提高效率。
3、平台锁定风险:
低代码开发平台提供了一键部署运行的能力,但底层技术方案对用户而言很可能是黑盒。应用运行模型完全依赖平台自身,在软件供应商层面不具备可替代性,用户存在被锁定的风险。例如,医院选用了某个低代码开发平台开发的产品,并且基于该平台自建了一些应用。当在商务合作上出现问题时,由于底层技术不同,就很难再以较小代价平滑迁移到另一个平台上。
(二)展望未来
2021年,Forrester发布的《中国低代码平台现状》报告中提到,中国公司的商业及技术决策者中,有58%的人正在采用低代码平台和工具来创建软件,还有16%的人已将低代码创建软件列入计划。
目前,面向医疗行业的全套低代码开发平台虽未完全成熟,但已经存在部分场景基于低代码开发工具成功落地的案例。在HIS加速整体升级换代的大趋势下,通过上级部门、医院、厂商等多方共同努力,我们有理由相信,随着低代码组件更加丰富、建模能力进一步增强、领域特定语言持续完善、AI技术加持下由自动化向智能化发展、平台开发标准与生态逐步健全、医疗数字化模型与流程标准不断统一,低代码开发平台在医疗行业必将掀起新一轮云原生、领域驱动、全栈信息技术创新的应用热潮。