今天晚上喝了几两65°的红星二锅头,坐在沙发上回想了下我这苦逼的程序员人生,从程序员到高级工程师的成长过程。想了想主题,今天就写篇《关于架构师那些事》的文章吧。
所有架构师都不是自带光环,都是是从程序员->工程师,然后跟对一个好的领导或者好的项目开始学习框架,然后结合现有的知识一步一步磨炼成就了现在架构师的光环,从来就没有一步登天的人才,都是从埋坑到填坑的过程中走过来的。
我曾经参与了很多项目的架构搭建及技术框架的选型,利用现在主流的框架搭建过平台,也利用一些开源的平台做过一些开发,其中走过的坑只有自己知道,那叫一个“爽”,包括:
多个tomcat分布式部署如何共享session,自己也写过比较复杂的功能然后封装成组件给程序员调用,例如权限控制、自定义报表组件、打印组件、凭证组件等。随着现在技术的不断成熟,不同阶梯的程序员也越来越多,怎样既能在提高开发效率的前提下,又能节省企业的成本,成为了不少科技公司管理的一大难题,特别是刚开始创业的公司。所以我们在拿到项目需要架构之前,要先了解项目的业务和模式,今天跟大家分享下我的一些经验。
就暂时列这么多吧(酒劲上来了),可以根据自己的经验和业务知识扩大下范围,也可以利用一些现有的快速开发平台然后再搭配组装,所有的架构和选型都没有对与错,只有适合自己就是最好的。
快速开发平台,就是可以使得开发更为快速的开发平台。当开发平台产生之后,虽然减少了编程人员大量的编程时间,但是很多开发平台的效果并不是很理想,比如说某些开发平台比较复杂、难以掌握;有的开发平台通用性比较差;有的开发平台在时间上并没有得到改善;还有的依然还是需要写很多代码等等。这些问题的存在促使开发者不断的摸索、不断的改进,到最后越做越成熟,以致于现在市面上出现的大部分开发平台效率都非常高,他们改善了以往的产品存在的缺陷,使得开发过程比以往更简洁、编写代码更少、开发效率越来越高。我也整理了一些开源的平台的资料,如下:
GitHub地址:https://github.com/thinkgem/jeesite
在线演示
JeeSite 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Spring MVC、Apache Shiro、MyBatis、Beetl、Bootstrap、AdminLTE)采用经典开发模式,让初学者能够更快的入门并投入到团队开发中去。在线代码生成功能,包括核心模块如:组织机构、角色用户、菜单及按钮授权、数据权限、系统参数、内容管理、工作流等。采用松耦合设计;界面无刷新,一键换肤;众多账号安全设置,密码策略;在线定时任务配置;支持集群,支持SAAS;支持多数据源。
技术选型
JeeSite演示demo
官网地址:http://www.itttm.com/
IT榻榻米是一款java轻量级智能快速开发平台,可以帮助您解决项目中90%的重复工作,让您更多关注业务逻辑。由于本身轻量级特性,可根据自身需求二次开发想要的功能。
IT榻榻米演示demo
IT榻榻米套餐
官网地址:http://www.javafast.cn/
JavaFast演示demo
官网地址:http://www.jeecg.org/
演示地址:http://demo.jeecg.org/loginController.do?login
JEECG (J2EE Code Generation)是一款基于代码生成器的免费开源的快速开发平台。使用JEECG可以简单快速地开发出企业级的Web应用系统。
随着WEB UI框架(EasyUi/Jquery UI/Ext)等的逐渐成熟,系统界面逐渐实现统一化,代码生成器也可以生成统一规范的界面!代码生成+手工MERGE半智能开发将是新的趋势,单表数据模型和一对多数据模型的增删改查功能直接生成使用,可节省50%工作量,快速提高开发效率!
Java编程有很多重复机械代码,生成器可以帮助解决50%的重复工作,让开发更多关注业务逻辑,从而实现代码生成+手工merge的半智能开发!JEECG智能框架可以有效解决信息孤岛问题,生成统一代码、统一规范、统一设计思路,使你能在这个平台上,快速开发出高效高质量代码,缩短项目开发周期。
平台亮点
平台架构
Jeecg演示demo1
Jeecg演示demo2
官网地址:http://www.eova.cn/
技术亮点
EOVA演示demo
官网地址:http://bsdn.org/projects/dorado7
演示地址:http://bsdn.org/projects/dorado7/deploy/sample-center/com.bstek.dorado.sample.Main.d
Dorado Presentation Middleware(即Dorado展现中间件,以下简称Dorado)致力于辅助Web应用中表现层的开发过程。Dorado主要可以为您带来如下两方面的使用价值:
Dorado Presentation Middleware产品包含3个主要的功能部分:Web客户端、服务端引擎、IDE集成开发工具。(见下面插图)
主要功能特点
1. 全新的Web客户端
Dorado7提供了全新打造的Web客户端,这包括全新的基础运行框架和全新的控件库。较之Dorado的前作,新的Web客户端将带来如下的增强:
2. 立体数据模型
“立体数据模型”因其相对于平面数据模型(二维数据模型)而得名。即指Dorado7推翻了Dorado前作中以DataSet为媒介、以二维表形式对于展现数据进行封装和管理的设计思路。 Dorado7不再局限数据必须以二维表结构与DataSet对接,而是可以支持非常自由的数据形式。并且也不再提供专用的数据封装对象。 这些变化使得展现层中的数据更加纯粹、更加贴切真实的业务含义。自然,也使开发变得更加便利、更加生动。
“立体数据模型”是Dorado7相对于前作最重要的概念变化,也是Dorado7最为核心的设计思想。 以上的寥寥数语并不足以阐明这一抽象概念,请参考 Dorado7方法论 中关于“立体数据模型”的更多论述。
3. 没有JSP的Web
秉承了Dorado产品的一贯风格,Dorado7仍以XML形式的视图配置文件作为定义Web界面的主要手段。 不过,在Dorado7中这里的视图配置文件被赋予了更多的内涵,视图配置文件已经可以完整的描述Web界面的所有特性,JSP不再是Dorado7的必选项。 在大多数情况下,直接访问一个视图配置文件就可以得到一个功能完整的Web界面。
可能很多开发人员对于此特性会感到一丝不安,出于某些技术人员习惯以及页面需求等原因,开发人员可能仍然需要以HTML形式来实现页面的布局。 Dorado7同样对此种使用方式提供了完善的支持。开发者可以很方便的使用JSP、Velocity或者其他类似的技术来为视图配置文件定义布局方式。 并且,新的开发方式让美工人员与开发人员的合作变得更为可行和便利。以JSP为例,Dorado7不再引入繁多的Taglib标签库,而是以纯HTML方式的占位符来辅助Web页面的布局。
4. 智能方法适配
“智能方法适配”是指允许开发人员尽可能按照自己的意愿、业务的需要来定义他们的业务方法,然后由Dorado引擎自动根据场景、参数名、参数类型等因素来判断应当怎样调用该业务方法。 “智能方法适配”是Dorado7提供的一个非常有特色的功能,提供此功能的主要目的是尽量减少开发人员所需要掌握的Dorado API,让业务方法的代码更加“业务化”,更加易于阅读。
通过“智能方法适配”也可以很好的体验出Dorado7所提倡的“基于约定而非配置”进行开发的理念。在实际的应用场景中大部分实现了Dorado前端的功能中可能并不需要引入任何Dorado的API。
5. 扩展和重用
为提高Dorado7产品的扩展性和可重用性我们在Dorado7中提供了很多新的特性,这些特性主要包括:
6. Client Edition
Dorado7提供Dorado7 Client Edition这样一个特性的产品打包方式,Dorado7 Client Edition中只包含了Dorado7 Presentation Middleware中的Web客户端部分(即Javascript和CSS的部分)。
发布此版本的目的是为了满足各种Web项目中前端界面增强的需求。这里提到的Web项目包括基于JEE的Web项目和其他非基于JEE的Web项目,如.Net、PHP等,其定位类似于Ext。 Dorado7 Client Edition从一个侧面体现出了Dorado7产品在设计上的封装度和灵活性。
7. 不仅仅是展现中间件
虽然Dorado7的主要功能都是围绕展现层这一主题展开的,可是我们认为Dorado7连同配套的SampleCenter提供给用户的并不仅仅是对Web应用展现层的简单补充。 通过Dorado7即相关的示例所承载的是一种非常实用的Web开发最佳实践、一种新的开发模式。
因此可以说,使用Dorado您得到的可能并不是仅仅是对展现层的改良,也是对整体应用开发模式的一次度量和重铸。
Dorado演示demo
地址:https://gitee.com/ldh123/maker
根据数据库结构,按照用户的要求,动态生成可执行代码
生成的maven结构。spring mvc + spring + mybatis传统接口
前端多技术: easyui, bootstrap + jsp, bootstrap + freemarker, javafx ui, flutter(android + ios)
技术亮点
代码生成工具1
代码生成工具2
代码生成工具3
代码生成工具4
代码生成工具5
今天的分享就到这吧,我相信还有很多优质的资源,以后我也会慢慢的补上,如有知道的小伙伴也可以通过评论来分享。
点赞+转发+评论,多多关注,以后有好的东西继续分享给大家!
感谢大家支持!
今天晚上喝了几两65°的红星二锅头,坐在沙发上回想了下我这苦逼的程序员人生,从程序员到高级工程师的成长过程。想了想主题,今天就写篇《关于架构师那些事》的文章吧。
所有架构师都不是自带光环,都是是从程序员->工程师,然后跟对一个好的领导或者好的项目开始学习框架,然后结合现有的知识一步一步磨炼成就了现在架构师的光环,从来就没有一步登天的人才,都是从埋坑到填坑的过程中走过来的。
我曾经参与了很多项目的架构搭建及技术框架的选型,利用现在主流的框架搭建过平台,也利用一些开源的平台做过一些开发,其中走过的坑只有自己知道,那叫一个“爽”,包括:
多个tomcat分布式部署如何共享session,自己也写过比较复杂的功能然后封装成组件给程序员调用,例如权限控制、自定义报表组件、打印组件、凭证组件等。随着现在技术的不断成熟,不同阶梯的程序员也越来越多,怎样既能在提高开发效率的前提下,又能节省企业的成本,成为了不少科技公司管理的一大难题,特别是刚开始创业的公司。所以我们在拿到项目需要架构之前,要先了解项目的业务和模式,今天跟大家分享下我的一些经验。
就暂时列这么多吧(酒劲上来了),可以根据自己的经验和业务知识扩大下范围,也可以利用一些现有的快速开发平台然后再搭配组装,所有的架构和选型都没有对与错,只有适合自己就是最好的。
快速开发平台,就是可以使得开发更为快速的开发平台。当开发平台产生之后,虽然减少了编程人员大量的编程时间,但是很多开发平台的效果并不是很理想,比如说某些开发平台比较复杂、难以掌握;有的开发平台通用性比较差;有的开发平台在时间上并没有得到改善;还有的依然还是需要写很多代码等等。这些问题的存在促使开发者不断的摸索、不断的改进,到最后越做越成熟,以致于现在市面上出现的大部分开发平台效率都非常高,他们改善了以往的产品存在的缺陷,使得开发过程比以往更简洁、编写代码更少、开发效率越来越高。我也整理了一些开源的平台的资料,如下:
GitHub地址:https://github.com/thinkgem/jeesite
在线演示
JeeSite 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Spring MVC、Apache Shiro、MyBatis、Beetl、Bootstrap、AdminLTE)采用经典开发模式,让初学者能够更快的入门并投入到团队开发中去。在线代码生成功能,包括核心模块如:组织机构、角色用户、菜单及按钮授权、数据权限、系统参数、内容管理、工作流等。采用松耦合设计;界面无刷新,一键换肤;众多账号安全设置,密码策略;在线定时任务配置;支持集群,支持SAAS;支持多数据源。
技术选型
JeeSite演示demo
官网地址:http://www.itttm.com/
IT榻榻米是一款java轻量级智能快速开发平台,可以帮助您解决项目中90%的重复工作,让您更多关注业务逻辑。由于本身轻量级特性,可根据自身需求二次开发想要的功能。
IT榻榻米演示demo
IT榻榻米套餐
官网地址:http://www.javafast.cn/
JavaFast演示demo
官网地址:http://www.jeecg.org/
演示地址:http://demo.jeecg.org/loginController.do?login
JEECG (J2EE Code Generation)是一款基于代码生成器的免费开源的快速开发平台。使用JEECG可以简单快速地开发出企业级的Web应用系统。
随着WEB UI框架(EasyUi/Jquery UI/Ext)等的逐渐成熟,系统界面逐渐实现统一化,代码生成器也可以生成统一规范的界面!代码生成+手工MERGE半智能开发将是新的趋势,单表数据模型和一对多数据模型的增删改查功能直接生成使用,可节省50%工作量,快速提高开发效率!
Java编程有很多重复机械代码,生成器可以帮助解决50%的重复工作,让开发更多关注业务逻辑,从而实现代码生成+手工merge的半智能开发!JEECG智能框架可以有效解决信息孤岛问题,生成统一代码、统一规范、统一设计思路,使你能在这个平台上,快速开发出高效高质量代码,缩短项目开发周期。
平台亮点
平台架构
Jeecg演示demo1
Jeecg演示demo2
官网地址:http://www.eova.cn/
技术亮点
EOVA演示demo
官网地址:http://bsdn.org/projects/dorado7
演示地址:http://bsdn.org/projects/dorado7/deploy/sample-center/com.bstek.dorado.sample.Main.d
Dorado Presentation Middleware(即Dorado展现中间件,以下简称Dorado)致力于辅助Web应用中表现层的开发过程。Dorado主要可以为您带来如下两方面的使用价值:
Dorado Presentation Middleware产品包含3个主要的功能部分:Web客户端、服务端引擎、IDE集成开发工具。(见下面插图)
主要功能特点
1. 全新的Web客户端
Dorado7提供了全新打造的Web客户端,这包括全新的基础运行框架和全新的控件库。较之Dorado的前作,新的Web客户端将带来如下的增强:
2. 立体数据模型
“立体数据模型”因其相对于平面数据模型(二维数据模型)而得名。即指Dorado7推翻了Dorado前作中以DataSet为媒介、以二维表形式对于展现数据进行封装和管理的设计思路。 Dorado7不再局限数据必须以二维表结构与DataSet对接,而是可以支持非常自由的数据形式。并且也不再提供专用的数据封装对象。 这些变化使得展现层中的数据更加纯粹、更加贴切真实的业务含义。自然,也使开发变得更加便利、更加生动。
“立体数据模型”是Dorado7相对于前作最重要的概念变化,也是Dorado7最为核心的设计思想。 以上的寥寥数语并不足以阐明这一抽象概念,请参考 Dorado7方法论 中关于“立体数据模型”的更多论述。
3. 没有JSP的Web
秉承了Dorado产品的一贯风格,Dorado7仍以XML形式的视图配置文件作为定义Web界面的主要手段。 不过,在Dorado7中这里的视图配置文件被赋予了更多的内涵,视图配置文件已经可以完整的描述Web界面的所有特性,JSP不再是Dorado7的必选项。 在大多数情况下,直接访问一个视图配置文件就可以得到一个功能完整的Web界面。
可能很多开发人员对于此特性会感到一丝不安,出于某些技术人员习惯以及页面需求等原因,开发人员可能仍然需要以HTML形式来实现页面的布局。 Dorado7同样对此种使用方式提供了完善的支持。开发者可以很方便的使用JSP、Velocity或者其他类似的技术来为视图配置文件定义布局方式。 并且,新的开发方式让美工人员与开发人员的合作变得更为可行和便利。以JSP为例,Dorado7不再引入繁多的Taglib标签库,而是以纯HTML方式的占位符来辅助Web页面的布局。
4. 智能方法适配
“智能方法适配”是指允许开发人员尽可能按照自己的意愿、业务的需要来定义他们的业务方法,然后由Dorado引擎自动根据场景、参数名、参数类型等因素来判断应当怎样调用该业务方法。 “智能方法适配”是Dorado7提供的一个非常有特色的功能,提供此功能的主要目的是尽量减少开发人员所需要掌握的Dorado API,让业务方法的代码更加“业务化”,更加易于阅读。
通过“智能方法适配”也可以很好的体验出Dorado7所提倡的“基于约定而非配置”进行开发的理念。在实际的应用场景中大部分实现了Dorado前端的功能中可能并不需要引入任何Dorado的API。
5. 扩展和重用
为提高Dorado7产品的扩展性和可重用性我们在Dorado7中提供了很多新的特性,这些特性主要包括:
6. Client Edition
Dorado7提供Dorado7 Client Edition这样一个特性的产品打包方式,Dorado7 Client Edition中只包含了Dorado7 Presentation Middleware中的Web客户端部分(即Javascript和CSS的部分)。
发布此版本的目的是为了满足各种Web项目中前端界面增强的需求。这里提到的Web项目包括基于JEE的Web项目和其他非基于JEE的Web项目,如.Net、PHP等,其定位类似于Ext。 Dorado7 Client Edition从一个侧面体现出了Dorado7产品在设计上的封装度和灵活性。
7. 不仅仅是展现中间件
虽然Dorado7的主要功能都是围绕展现层这一主题展开的,可是我们认为Dorado7连同配套的SampleCenter提供给用户的并不仅仅是对Web应用展现层的简单补充。 通过Dorado7即相关的示例所承载的是一种非常实用的Web开发最佳实践、一种新的开发模式。
因此可以说,使用Dorado您得到的可能并不是仅仅是对展现层的改良,也是对整体应用开发模式的一次度量和重铸。
Dorado演示demo
地址:https://gitee.com/ldh123/maker
根据数据库结构,按照用户的要求,动态生成可执行代码
生成的maven结构。spring mvc + spring + mybatis传统接口
前端多技术: easyui, bootstrap + jsp, bootstrap + freemarker, javafx ui, flutter(android + ios)
技术亮点
代码生成工具1
代码生成工具2
代码生成工具3
代码生成工具4
代码生成工具5
今天的分享就到这吧,我相信还有很多优质的资源,以后我也会慢慢的补上,如有知道的小伙伴也可以通过评论来分享。
点赞+转发+评论,多多关注,以后有好的东西继续分享给大家!
感谢大家支持!
平台级项目开发中,选型和设计的重要性不言而喻,设计是软件开发的先导,是对系统整体结构和功能的规划和布局,在对医疗软件业务的深刻理解之上,分析系统功能和业务流程,确定合适的技术架构和数据模型,定义接口规范,最终才能达成目标。
本文在技术选型上遵循的思路:用成熟的互联网技术逐渐升级改造医疗中的传统技术体系。互联网技术比传统技术有更有预期的发展性,更活跃的社团性,更先进的技术性。有时候选择大于努力,充分利用已有的成熟轮子,选型得当后续活干得少。
代码未动,设计先行,考虑篇幅的限制,本章节先概述选型原则和设计思路,实现内容在后续分章节说明。在建设思路中已经勾勒了技术框架的组成诉求,去掉具体的业务模块部分,区域医疗平台可以由4个通用部分组成。
平台设计示意图中的业务中台包括业务开发框架和业务协同框架,数据中台包括数仓体系和数据计算。这里的数据计算可以是常见的指标计算,标签画像的体系,成熟的机器学习体系,以及基于LLM构建的智能体系,共同支撑上层应用,以及医疗涉众的使用。
医疗体系业务极为庞杂,分为院内系统和区域系统,院内系统按照国家卫计委2018年发布的《全国医院信息化建设标准与规范(试行)》明确了医院应用系统功能多达200多个,区域系统也不少,而且业务体系更加复杂。所以在设计医疗业务系统,需要根据业务场景和数据容量,选择合适的开发框架。以前有很多医疗体系中有不少老系统基于net设计,但目前基于信创要求,会逐渐要求转到自主可控/开源体系中。
业务系统可采用B/S架构,推荐采用Java生态体系来建设,以符合信创的要求。根据项目特点和规模采用单体结构或微服务结构,业务系统的开发框架可以自研脚手架,也可以根据成熟的开源产品进行产品化。现在基于Java的开发框架已经很成熟,也有成熟度较高的开源产品,直接选择轮子就行。
如果是10年前,会推荐JeeSite,不过之后有部分代码闭源了。所以现在做单体系统,可以是采用JSite,前端用的AdminLTE3 + Beetl3。如果感觉界面不怎么顺手,可以用TopJUI前端框架来改造前端,基于高版本的jQuery EasyUI构建,适用于MES、ERP、HIS、CRM、OA等后台系统的开发,而且界面已经脱离了EasyUI早期版本的经典式样,有了明显现代化的前端呈现。讲到这里,为dorado前端框架感到惋惜,逐渐小众化了。
单体系统的开发和部署都很方便,还可以搭建Svn/Git + Jenkins + Maven + SonarQube实现日构建系统,规范化开发。如果数据量在增大,可以采用读写分离以及分库分表方式,再配置Redis进行热点数据缓存提升系统性能,实现科室级的项目快速开发。如果这是大科室,访问量有点多,可以部署个nginx进行粘性会话配置,实现系统的扩展。
在单体项目开发中,系统同样可以分为前端和后端两大部分,之所以保留这套体系是因为有很多科室级别的项目适合这种模式,而且架构简单,适合熟练业务的开发人员在前后端开发时同步搞定,避免前后端拆开之后的人力损耗,而且借鉴dubbo + zookeeper体系,也可以拆分为前后端模式,实现急速开发和快速拆分。
代码生成
中后台的应用有大量基于表的常规增删改查功能,可以采用代码生成方式来生成前端和后端代码,并符合预设的目录和代码规范结构,简化开发工作量,以便快速部署。
从历史的角度来看,代码生成只是平台业务开发体系的初级阶段,基于模版按照预设规则生成围绕表的增删改查的通用代码。在表单设计器/低代码平台中有了更高级方式,围绕页面表单生成相应逻辑的业务处理,设计者拥有更多的处理选项。
大江东去浪淘尽,曾经的单体架构也从小甜甜变成了牛夫人。基于现在的技术体系一般起手就是前后端分离的体系,前端从springMVC改成了Vue方式。不是说springMVC不行,而是在互联网模式中从支持微服务体系、前端处理性能上看不是最合适的选择。
采用这种开发模式下,人力成本会提升很多,医疗行业需要有多年经验的业务开发人员参与其中,这些从远古时代存留下来的业务开发人员熟悉的是单体技术栈,所以需要给他们配置一个前端开发人员。
如果是新建前后端分离的项目直接基于若依或者ruoyi-vue-pro作为基础开发框架。推荐ruoyi-vue-pro,基础框架的源码全公开,设计良好的dependencies,基于Maven Module技术体系的常用业务功能扩展,集成了mybaits-plus,redis,mq,job等。另外ruoyi-vue-pro有springCloud的微服务版本,这样方便业务的迁移和升级,只是要注意2个版本的module扩展不完全一样,有细微区别。
1、项目结构
RuoYi-Vue 全新 Pro 版本,优化重构所有功能。基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + UniApp 微信小程序,支持 RBAC 动态权限、数据权限、SaaS 多租户、Flowable 工作流、三方登录、支付、短信、商城等功能。
有3种前端(越靠后颜值越高)
2、基于mybatis-flex的改造
原版ruoyi-vue-pro采用的是mybatis-plus作为orm,也是大多数脚手架的选择,而且ruoyi-vue-pro在mybatis-plus的基础上做了功能的提炼,抽象了一些常用的处理扩展作为抽象类方便使用。只是本人在使用中发现mybatis-flex提供了相似功能,并且有更通用的表达。下面的代码就是对比效果,被注解的是mybatis-plus的扩展写法,外面的是基于mybatis-flex写法,纯个人喜好。
@Mapper
public interface DeptMapper extends BaseMapper<DeptEntity> {
/*default List<DeptEntity> selectList(DeptListReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<DeptEntity>()
.likeIfPresent(DeptEntity::getName, reqVO.getName())
.eqIfPresent(DeptEntity::getStatus, reqVO.getStatus()));
}*/
default List<DeptEntity> selectList(DeptListReqVO reqVO) {
return selectListByQuery( QueryWrapper.*create*()
.where(*DEPT_ENTITY*.NAME.like(reqVO.getName(), If::*notNull*))
.and(*DEPT_ENTITY*.STATUS.eq(reqVO.getStatus(), If::*notNull*)) );
}
/*default DeptEntity selectByParentIdAndName(Long parentId, String name) {
return selectOne(DeptEntity::getParentId, parentId, DeptEntity::getName, name);
}*/
default DeptEntity selectByParentIdAndName(Long parentId, String name) {
return selectOneByQuery(QueryWrapper.*create*()
.where(*DEPT_ENTITY*.PARENT_ID.eq(parentId)).and(*DEPT_ENTITY*.NAME.eq(name)));
}
/*default Long selectCountByParentId(Long parentId) {
return selectCount(DeptEntity::getParentId, parentId);
}*/
default Long selectCountByParentId(Long parentId) {
return selectCountByCondition(*DEPT_ENTITY*.PARENT_ID.eq(parentId));
}
}
采用前后端分离的项目,在业务使用量起来后,可以方便的迁移到微服务体系,尤其是alibaba的微服务体系。注意不是使用了微服务技术就是微服务平台,有一些平台虽然使用了微服务技术(SpringCloud 或ServiceComb),但只是实现了平台本身架构是微服务的,而基于平台二次开发的项目却是单体的,要看平台是否支持用户自行扩展新的服务,且可以做到各服务之间的数据库隔离,这样做出来的项目才能称得上微服务项目。
如果是采用ruoyi-vue-pro迁移到yudao-cloud,则更加方便,修改若干配置即可。如果在开发过程中没有完全遵循微服务的划分,有模块之间的横向api调用,则需要改成微服务模式。从功能上看和ruoyi-vue-pro基本类似,采用了alibaba的springCloud技术栈,增加了nacos,racketMQ,gateway等微服务基础组件,同时把Job和事务改成了xxl-job和seata。
表单建模器
之前的代码生成器的模式比较固定:要么从数据库读取已经定义好的表结构,工具生成实体部分代码,或者是与框架强相关的不同层次的服务代码;要么从配置文件,再反向生成数据库代码或者业务相关代码;还有可能先定义实体类,再生成其他部分代码。生成代码之后,再拷贝到具体的代码目录。
在脚手架开发的基础上,可以套用一个表单建模器,给后端开发人员提供一个快速界面开发的选项。基于表单建模器的开发:首先需要面向业务实现表单与实体模型之间的映射;其次运行时CRUD等与数据存储相关操作,以及自动生成Id、自动添加审计日志、动态生成各种Sql语句、自动方法验证等;然后可以定义与实体模型相关的动态方法执行,包括通用的增册改查、分页获取数据等、执行自定义的Sql语句,还可以执行反射或者微服务调用定义等。
表单建模器能够快速创建常规的业务模块,可以把常规的业务功能做成模板,方便快速的创建业务模块功能,选择一个模板之后,会将模板对应的表单、子表单、子视图、控件等所有自定义表单相关的定义全部自动创建出来,通过底层一套schema或DSL规范约束,生成JSON Schema;表单引擎通过加载JSON Schema渲染出表单。
不过要实现复杂的业务,单纯的表单建模器不一定合适,本身医疗体系中面向患者的业务处理就很复杂,建模器的预设组件是覆盖不了全部的医疗业务,强行匹配会适得其反。可以根据医疗业务的特点,把系统分为面向管理者的中后台业务和面向患者的前台业务,中后台业务可以采用代码生成、表单建模、或者低代码平台;而前台业务还是需要前端开发人员根据实际业务去设计,根据业务特点去适配界面。
关于MIT协议
ruoyi-vue-pro和yudao-cloud采用的MIT协议,这是一种非常宽松的开源许可证,允许软件在保留版权和许可证声明的前提下,免费使用、复制、修改、合并、出版、分发、再授权和销售等。该许可证适用于几乎所有类型的软件,包括商业软件和专有软件。
基于前后端分离或者微服务体系的脚手架,为医疗业务的实现提供了良好的基础,只是有一类中后台管理的业务,涉及大量的基于表的增删改查业务和业务审批的业务,相对业务比较规范,可以采用低代码平台实现相应的业务,最终形成中后台管理业务由低代码平台实现,复杂医疗业务由前后端/微服务脚手架实现,从而优化开发过程。
低代码基础架构可分为四个部分:由核心引擎(页面、模型、工作流程、API编排)实现前端交互和业务编排的效果;可视化设计平台对接开发者,实现平台的表单设计和业务设定;平台门户提供通用的技术组件和常规业务模板;运营管理是平台的基础组件部分,对平台的运行状态进行检测与管理。
开发者使用低代码进行应用开发时,需要主数据设定,领域建模、页面建模、服务编排、编译出码和部署运营等环节,其中页面建模与服务编排是核心开发环节。
低代码平台中,主要由建模引擎和编排引擎支撑用户的前端页面操作。其中建模引擎支撑静态模型构建,编排引擎支撑动态逻辑流转。建模引擎支撑开发者在前端开发界面对应用程序的业务逻辑、数据结构和界面布局等进行设计和构建的行为,包含数据引擎、表单引擎、页面引擎、领域建模引擎等。编排引擎支撑用户可视化编排应用的数据表单流转、自动化管理、服务调度,包含流程引擎、规则引擎、消息引擎、事件驱动引擎等。在建模引擎和编排引擎的共同作用下搭建完整的应用外壳。
现在业界也有了一些低代码平台,从开源角度看,成熟度高的是Jecloud。Jecloud分为社区版和商业版本。社区版提供了基础的低代码开发功能,以及OA审批功能。商业版多了括门户展示套件,接口引擎,文档套件,手机套件等扩展组件。
平台功能架构分为:存储层、平台层、应用层、展现层。根据其不同层级划分,开发和运维人员可根据不同的部署及实施方案构建出可用性强、扩展性高的应用。
Jecloud界面颜值高,做出来的效果和界面漂亮,在颜值即代表正义的当下,是一款不错的开箱即用低代码平台。Jecloud是一套基于ServiceComb的微服务体系,特别适合信创平台。Jecloud包括go和java部分,其中java部分开源,go是用来管理各个微服务的应用。
服务名称 | 占用端口 | 用途 | 说明 |
mysql | 31306 | 数据服务 | 基础服务 |
Redis | 31379 | 提供二级缓存等 | 基础服务 |
openresty | 80 | 网关代理 | 基础服务 |
comb | 30100/30103 | 注册中心 | 基础服务 |
apollo | 8070/8080/8090 | 配置中心 | 基础服务 |
gateway | 3050 | 业务网关 | jecloud服务 |
meta | 3051 | 元数据 | jecloud服务 |
rbac | 3052 | 权限管理 | jecloud服务 |
connector | 3053/7010 | 连接器 | jecloud服务 |
workflow | 3054 | 工作流 | jecloud服务 |
demo | 3055 | demo | jecloud服务 |
document | 3056 | 文档 | jecloud服务 |
message | 3057 | 消息 | jecloud服务 |
job | 3060 | job | jecloud服务 |
operator | 3061 | operator | jecloud管理(go) |
jinit | jinit | jecloud管理(go) |
前面阐述了4款开发框架的形态,也是开发平台的发展过程,总有1款适合当前的业务开发。考虑到医疗体系的复杂和多样性,推荐采用2套以上的框架,混合适配不同的场景开发,通过微服务做各个模块的服务集成。
一种可能的场景是后台管理型的业务可以采用低代码平台的模式;而面向患者的业务系统采用单体模式或者前后端模式;对于互联网的惠民应用,在后台服务的基础上生成APP应用页面或者微信小程序前端,就能涵盖医疗业务体系的方方面面。
前文阐述了基于表的业务模块开发,围绕表单进行用户的交互。还有一种是基于业务流程的开发,有2种业务流程:人-机交互的人工审批流程,机-机的自动处理流程(服务编排),Jecloud已经提供了基于Activiti7的审批型流程设计,但如果是基于微服务编排的业务逻辑,则需要服务编排引擎来支撑,两者应用场景不一样,所以设计思路也不同,需要区分对待。
服务编排的概念是微服务架构落地伴生而来,原本一次请求即可处理完成的业务,现在可能需要多次请求才能完成,为了降低前端逻辑的复杂性并提高前后端交互效率,BFF层应运而生。BFF作为前后端的代理层,提供了一个业务接口聚合层,其核心职责是为前端(PC、小程序、H5等)适配不同的业务场景,降低客户端与业务端的耦合,前期通过硬编码的方式来实现BFF层的需求,是最简单最直接的方式。但随着BFF层承接业务需求的增多,采取硬编码方式容易产生编码效率低、编码细节难以规范、调试测试效率低等问题。
服务编排在统一规范的基础上提供了业务逻辑的柔性设计,通过可视化设计快速的API的编排、调试、测试和上线。看上去服务编排和工作流引擎在形式上趋同,但两者不一样。在脚手架/低代码平台会提供类似Flowable 、Activiti、Camunda实现的OA审批工作流系统。这种工作流基于表单模式,通过扩展表或者表单表上添加辅组字段满足业务的审批流转,最终形成留痕记录。这种模式都是人-机交互模式,而服务编排,更多的是机-机交互模式,强调的是服务(API)的有序调用。
微服务体系架构是一种前后端架构,在前后端之间添加中间层 (BFF:Backend For Frontend),以解决服务的汇聚和调用,把BFF加入在前后端架构之后,前端服务不再直接访问后端微服务,而是通过 BFF 层进行访问。从微服务的角度来看,由于有关 UI 逻辑的数据在 BFF 层进行了处理,减少前后端细颗粒微服务之间的相互调用。
BFF层的主要职责是组合使用后台数据,稍微额外处理C端展示逻辑。可以参看前章的“基于tuxedo的API编排架构”的内容。综上所述,采用BFF之后的开发逻辑:通过后台工具查到原始数据,然后按照业务要求,把查到的原始数据封装成API,再通过加工->组装->适配成可以展示给前端的信息,最后发送给客户端使用。这部分各个服务(API)的聚合工作主要由中间层的BFF API负责。
BFF API的处理也是有一定的业务逻辑,可以抽象为串行,并行,分支,汇聚等,包括多种服务接口的适配,可视化业务逻辑的设计,持久化保存需求,接口返回数据的裁剪、排序、格式化等操作,这些功能又可以映射为BPM的能力。所以最终支持BFF层运行的底层组件是BPM系统,提高提升微服务的复用度,降低编码及编译打包的等待时间,提高业务逻辑的快速交付能力。
可视化服务编排系统的核心功能都是对BFF日常需求及研发流程的抽象,从接口的调用方式、出入参的处理、接口异常情况的处理、服务的调试测试、服务的上线流程等几个维度完成系统整体功能的设计。
A、实现思路
B、具体方案
C、BPM 系统选型
核心功能
当平台积累了大量的后台服务,如何有效使用是平台设计的重要内容。服务首先要归类,做好领域划分,然后服务的命名和版本要规范,服务的出参和入参要考虑方便和实用。
A、平台服务列表
B、服务类型
服务编排需要集成不同的第三方服务和内部服务,对于这些应用,接口和参数各不相同,考虑到方便服务的集成和内部服务的稳定,可以采用:外部接口=>转换服务=>内部服务。
3、服务生命周期
微服务API的开发纳入生命周期管理时,遵循一套开发,上线,下线,版本控制的管理。另外构建服务度量指标,通过日志和性能数据采集,监控服务运行监控状态,并执行相应的限流,预警等管控策略,以确保微服务的持续健康,可靠和高效运行。
功能自洽的区域平台的BFM-engine功能包括:
引擎的实现会涉及到flow-act-item,彼此有依赖关系,另外自身也有状态变化,包括create-run-finish以及其他辅助状态,所以如果自研引擎,需要构建一个3层状态机模型。
对于3层状态机,每层状态机拥有自己的状态变化,同时状态变化可能会对其他状态机产生影响。这里区分2种情况:
医院/平台的互联互通为医疗健康大数据奠定了基础;同时个性化诊断、疾病预测与辅助决策等各类医疗人工智能应用也在不断涌现,医疗健康大数据的存储和分析,需要有一套体系来管理,数据仓库由此应运而生。
数据仓库主要基于业务库(OLTP)的数据以及第三方外部数据,通过采集清洗转换后存储在事实表中(事实+维度),实现系统的分析整理,支持各种分析方法,如联机分析处理(OLAP)、数据挖掘等进行,进而支持决策支持系统、从而获取有价值的信息。
数仓的建设需要根据数据采集量,指标计算的要求,周边系统的匹配度,开发人员和运维人员的熟练程度来综合考虑:
对于数据仓库而言,无论怎么升级和变化,其设计目标是一致的,要求如下:
医疗体系平台采用离线批处理方式能兼容最大多数的数据源,方便最大范围的采集数据。在当前考虑关系型数据的情况下,数仓可以采用MPP 数据库;在将来构建区域一统的多模态数据资源池的时候,可以考虑采用数据湖体系。
数据湖和数据仓库作为大数据系统的两条不同演进路线,各有适用范围。数据仓库适合处理结构化的数据可以实现良好的分析与处理,但对于非结构化数据、半结构化数据以及种类繁多、存储量大的数据就需要数据湖来处理。
数据湖并不比数据仓库在处理流程上多出了什么内容,更多的在于结构性的变化,2种处理方式,代表着两种数据处理和服务模式,是数据技术领域的一次轮回。
数据仓库的数据来源包括健康医疗大数据和其他行业数据来源。健康医疗大数据主要包括汇聚个体和各类医疗卫生业务机构数据所形成的全员人口、电子健康档案、电子病历、各垂直系统的业务管理数据等。其他行业数据来源包括教育、公安、民政、人力资源、社会保障、农业、安全监管、检验检疫(气象、保险监管、残联等相关部门及行业。
这些数据源来自各个医疗机构的业务库,汇聚到交换中心的时候需要根据国家规范进行转换清洗,形成区域一统的数据标准。也可以采用CDA作为数据来源进行采集,但一般来说,CDA的数据质量不如交换库的采集模式。
数据标准是一套由管理制度、管控流程、技术工具共同组成的体系,通过这套体系来推广和应用统一的数据定义、数据分类、纪律格式和转换、编码等来对数据的标准化,保障数据定义和使用的一致性、准确性和完整性的规范性约束。不限于如下标准:
在数据类规范中,通常着重对数据集、数据元、代码以及数据交换接口的内容进行标准规范,从业务数据的角度,针对信息化建设的需要进行业务标准的编制。
在医疗体系中,数据模型贯穿整个业务领域和数据ETL的过程(ods-dwd-dws)。在业务领域中,医学元数据结合领域信息模型可以被用来构建医疗数据的语义表达,从而更全面地表达和描述电子病历。医学元数据通常包括医学数据的模式、定义和属性,而领域信息模型则提供了关于特定医学领域的知识和规则。
模型与数据库
在基于医院数据或区域平台数据进行临床科研和数据应用开发的过程中,即使在病人数量足够的情况下,数据的可用性依然存在问题。目前影响医疗数据质量的原因如下:
A、数据治理的层级
在医疗体系中,将医疗数据治理按管理机构分为4类,本文更关注第2类。
1、医院数据治理
医院成立数据管理部门,完成流程和规范制订、数据质量保证和质量控制、流程审批等工作,并对数据使用方和IT设施建设方进行管理,对其数据资产的管理和控制,支撑并保障数据被安全、高效地交换与使用。
2、区域数据治理
与医院数据管理内容相似,但实施起来难度更复杂:
l 主数据管理和元数据管理的复杂度高:病人基础数据是临床医疗信息的主数据。区域数据来源于多家医院,每家医院病人用的身份标识不一样,病人基础信息也会有差异。需要通过统一标识来统一病人的主数据,并关联病人在不同医院的就诊记录。
l 数据安全性管理更严格:区域数据量比较大,病人的就诊数据在时序上更完整,因此数据泄露带来的严重性更大,区域对数据安全管理的要求更严格。
3、专科联盟/专科医联体/专病中心的数据治理
专科联盟一般由权威医疗机构牵头,但是其牵头单位并没有行政权力,联盟单位之间的协作共享完全是一种自愿的行为。因此,专科联盟形式的医联体除了要解决区域医联体中碰到的技术问题外,还要解决数据共享后的利益分享问题,确保医联体每个成员能在数据共享活动中受益。
4、医疗标注数据与知识型数据治理
数据治理主要面向的对象是病人数据,但在医院协作共享过程中,知识型数据也必不可少。在面向分析推理等智能应用,需要大量的标注数据,这些数据的管理和利用也属于数据治理的范畴。
标注数据主要是针对电子病历文本、影像等非结构化数据进行实体、属性、关系等标注得到的数据,标注数据的质量对训练深度学习或神经网络模型起着决定性作用。为了实现对标注数据的治理,应该针对不同粒度的实体建立一套完整的标注规范,对标注过程的各要素进行规范化管理,并对标注结果进行交叉验证等。
B、数据治理的内容
医疗数据治理工具平台应包含数据存储子系统、元数据管理子系统、主数据管理子系统、数据质量管控子系统以及患者数据脱敏工具等。
1、元数据管理
目前医院信息系统中存在数据模式描述文档不全、系统之间数据关联不清晰、系统值域标准不统一等问题,这为数据集成造成了困难。在区域层面,这些问题更严重。因此,需要通过元数据管理获取业务系统中数据的含义,辅助数据理解,增加分析的敏捷性。元数据管理可以提高数据的可访问性、一致性及可用性,为多种来源数据的整合搭建了桥梁。
与其他领域相比,医疗领域的元数据规范相对比较成熟,参看《国家卫生计生委办公厅关于印发住院病案首页数据填写质量规范(暂行)和住院病案首页数据质量管理与控制指标(2016版)的通知》(国卫办医发〔2016〕24号)、《病历书写规范》(卫医政发〔2010〕11号)、《电子病历基本规范》(卫医政发〔2010〕24号)、《卫生信息基本数据集编制规范》(WS 370-2012)、《卫生管理基本数据集》(WS374-2012)与《电子病历基本架构与数据标准》(卫办发〔2009〕130号)等。在数据值编码标准方面,国际上有疾病分类编码ICD-10、手术操作编码ICD-9、SNOMED术语库;国内有《卫生机构(组织)分类与代码表》(WS2182002)、《社会保险药品分类与代码》(LD/T90-2012)和《中医病证分类与代码》(GB/T15657-1995)。
虽然国家已经规范了各种医疗元数据,然而在实际落地过程中,这些标准会根据应用进行不同程度的删减和扩充,甚至出现错误的使用。因此,需要基于标准建立和实现元数据管理系统,实现对元数据的统一管理,与各个应用关联,从而实现元数据的统一。
2、主数据管理
医疗数据的主数据主要有病人信息和医生信息两类。目前,在医院层面,各业务系统对病人的信息分别进行存储,但大型医院都建立了临床数据中心(CDR),为了唯一标识一个病人,需要通过构建病人主索引号(EMPI)将存储于不同系统的病人关联在一起。这里有两个问题:
为此,需要在定义系统主数据的情况下,构建主数据管理中央库,解决主数据碎片问题。可以从各业务系统抽取数据,并进行数据融合,形成完备的主数据信息,然后再将主数据信息分发给各业务系统,保证各业务系统中这些信息的准确性和完整性。这样就形成了公共的重要属性由主数据管理系统管理、各业务系统的特定属性由各系统独立管理的模式。
在构建主数据管理库时,首先从多个异构的业务子系统中以ETL的方式抽取关键数据,然后利用元数据库对其中的编码、描述进行标准化。接着通过匹配算法完成对数据的错误消除和信息融合各个业务系统的差异性数据。对于匹配不到的孤立信息,监控跟踪,以及人工处理。同时进匹配算法,最后将归整好的主数据信息并入主数据库。
3、数据质量管控子系统
从数据产生过程来看,医疗数据质量问题主要来源于3个方面。
在医疗数据治理过程中,需要了解最终的使用场景,也需要从业务系统的数据源头控制质量,并保证每个融合和加工过程的正确性。另外出现数据错误时,进行数据修正。
因此质量管控平台包括了数据质量监控、数据质量评估以及数据修正。数据质量监控主要针对从业务系统抽取的或是从外部传送的接口数据,从及时性、有效性和完整性等几个指标监测接口内容本身的数据质量问题,对采集程序进行监控;数据质量评估是指对融合后的数据进行质量评估。
*请认真填写需求信息,我们会在24小时内与您取得联系。