大家好欢迎来到停止重构的频道。本期介绍我们的新后端框架Once2一个能让所有后端代码只写1次更看重项目过程、工程质量的框架。我们按这样的顺序展开介绍1、模块、业务分离2、Once只是一种规则3、工作原理4、设计愿景模块、业务分离首先介绍最主要的模块、业务分离。从宏观上讲后端应用程序是多个请求接口的集合而对于单个接口而言是执行多个步骤。基于这样的观点Once将代码分离了两层模块代码、业务代码模块代码是需要写Java代码实现具体功能的。只需要关心通用功能的实现例如文件上传、参数检查、数据库操作等。业务代码指的是具体的后端接口。只需要关心业务功能的实现步骤也就是对模块使用顺序进行编排而不需要关心具体功能如何实现。模块部分每个模块完全独立且具有统一的使用方式。模块可以单独运行调试复制粘贴文件夹即可无条件复用或替换升级。Once也提供了模块库可以一键下载更新模块。例如检查参数、上传文件、数据库操作等模块。后续也会持续扩展模块池。这里顺便提一下大家比较关心的数据库模块。数据库模块不需要配置数据表entity它会在工程启动时自动获取生成。数据操作上也更加简洁。业务部分由于每个后端接口只是对模块使用顺序进行编排。所以这部分不需要写代码只需要通过Json配置即可。这样能免去冗余代码的编写。工程运行时Json配置会自动生成真正的Java代码。Once只是一种规则Once只是一种规则实质上是一个SpringBoot3工程。发生的错误都可以以SpringBoot工程的视角进行排查。Once只是在SpringBoot工程的基础上做了2件事情。一是规整化代码结构将代码分离为业务代码、模块代码、通用代码。规范了模块调用、日志、错误码等等。二是加入代码生成器Christmas用于生成拼接代码。例如将业务代码从Json配置生成为真正的Java代码从模块库下载模块更新框架等。工作原理接下来是工作原理为了实现以上模块代码、业务代码分离Once架构加入了数据。池数据池可以看作是一个接口中的全局变量所有模块都可以对其进行添加、删除数据。具体工作原理为在接口逻辑开始时会将请求参数及其他重要对象存放在数据池中。调用模块时需要设置模块参数以及将数据池传递给模块。模块按模块参数执行任务时可从数据池获取数据或对数据池数据进行修改。模块执行任务完毕后检查模块是否报错不报错继续下一步否则中断逻辑返回客户端。这里的报错返回只是默认行为。可以添加逻辑选择器以实现更加复杂的逻辑如发生错误重试、发生错误启动异常逻辑等。接口返回时自动将数据池中用于记录返回数据的部分转换为Json字符串并返回客户端。设计愿景Once与其他技术框架的侧重点是不一样的。我们更关心项目过程、工程质量我们是按一个团队的视角进行设计的。主要是针对中大型项目更看重整体成本、运维/迭代难度。Once可以缩减代码、提升代码复用度但这并不是Once的唯一目的。我们更希望通过模块积累降低新项目成本希望团队能更合理地分工人员流动不会对项目造成影响。模块代码开发是需要有一定后端开发经验的程序员才能胜任的我们希望这些工作能独立开来。一方面模块可以单独调试开发且无条件复用在别的项目。另一方面由于项目进度等原因某些模块可能是临时开发或者存在缺陷的以后可以单独替换这些模块。业务代码由于使用Json配置替代了编码且无需了解实际模块的运行原理。所以业务代码可以交由经验尚浅或者其他领域的程序员完成。这样做除了能加快开发效率更重要的是可以约束业务代码编写让业务逻辑更加清晰明了。避免每次排查BUG时都需要先花很长时间理解逻辑然后再逐一排查。总结最后Once2已经放在了GitHub、Gitee。我们也提供了完整的使用文档。感兴趣的小伙伴可以尝试一下点个Star就更好了。以后我们会不断推出新模块丰富模块池。当模块池和用户量到达一定规模后将继续推出图形编辑界面进一步推动低代码平台。