roadmap 2024

1、子模块版本升级(Q2)

  • [ ] 模块重新命名,super 改为 isass,各模块的核心代码模块以 core 结尾

举个例子

原模块名 新模块名
super-core isass-core
super-core-mq isass-mq-core
super-core-ma-kafka011 isass-mq-kafka011
  • [ ] 使用java模块化技术重新划分模块,核心模块与 spring 解耦,便于非 spring 体系中使用。参考主流框架的方式,通过新建 spring-boot-starter/spring-boot-autoconfigure 模块,与 spring 集成。例如新建模块 isass-cache-spring-boot-starter
    • 至少实现 isass-core 模块与 spring 解耦。其他模块如 isass-cache-redis,本身是基于 spring 的,可能难以解耦
  • [ ] jdk 升级到 21,springboot/cloud 升级到最新版,所有依赖升级到最新版本
  • [ ] 优化 flyway 单体与微服务适配的方式,不直接修改源码
  • [ ] 优化 mybatis-plus 的初始化配置方式,复用 mybatis-plus 的配置类
  • [ ] 删除swagger(Knife4j)
    • 2025年微服务升级时,再集成 smart-doc。web接口调试页面对比 “smart-doc自带ui”、“Knife4j”、“zyplayer-doc”,选择其一集成

2、异常处理(Q2)

  • [ ] 重构异常模块,优化异常抛出的接口使用方式
  • [ ] 异常码按微服务端口分类,isass 框架的异常码按模块分类,支持捕获已有异常转换成约定的异常码和异常消息
  • [ ] Resp 新增 detailMessage 字段,用于在开发环境返回异常的详细信息,方便排查问题。原有的 message 只显示简单的异常信息

3、低代码模块(v3通用代码设计实现)(Q3~Q4)

3.1、底层设计(Q3)

  • [ ] 新增低代码子模块,并把迁移 v1 , v2 迁移进来;新增 v3 接口,结合 DDD 重新设计实现
    • 可在数据库字段增加注释,描述各表/字段之间的关系,便于框架分析生成领域对象
  • [ ] 支持自定义实体(非自动生成的实体)继承和实现v3系列接口,主要是能够实现查询条件接口,能统一非标实体的分页查询,排序查询等条件规范
  • [ ] 优化分页对象的选用,使用自定义分页对象或 spring 的分页对象
  • [ ] 取消 db 实体,探索如何使用一个 orm 无关的实体,也能让 orm 功能生效。可能需要使用 lombok 自定义注解或者 javassist 动态修改源码
  • [ ] 支持同时使用多个 orm 框架,支持快速切换通用代码的 orm 框架,以便后续切换成 sqltoy
  • [ ] criteria 类删除or、NotEqual等大量条件判断字段,只保留原始字段,以便加快编译速度和在idea打开java文件的速度。删除的字段使用 map 接收,并实现对应的判断逻辑
  • [ ] 新增 access 接入层,接入实现方式有 spring 的 controller、socketio 消息监听器、kafka 消息消费者、定时任务等。各个接入实现方式使用 IService 提供的信息动态生成,无需生成代码
    • v3通用 controller 使用 spring 接口动态生成,不再生成 controller 代码
    • 思考 controller 应该如何分组,是按照原来的每一个实体生成一个 controller,还是v3通用接口只有一个 controller,不同实体的接口通过路径参数区分。影响点:如果只有1个controller,则在api文档展示时,会简洁很多,但是需要复制某个实体的接口文档给前端时,需要另外告知实体的路径参数是什么
    • 如果只使用1个 controller,实体的路径参数可以使用枚举类,在 api 文档中可以下拉选择
  • [ ] 新增v3代码生成器

3.2、功能增强(Q4)

  • [ ] 基于jsr303规范,新增实体字段校验功能,支持校验功能分组,即新增和修改等不同场景能执行不同校验。并优化spring默认返回的“校验不通过”的响应消息
  • [ ] service 逻辑提供事件监听功能,使业务能够添加运行 service 逻辑时的前置和后置逻辑。
  • [ ] 新增级联删除,关联表删除功能。通过接口参数判断是否需要级联/关联删除
  • [ ] 通用的新增接口,支持配置指定字段自动赋值当前时间的功能,支持指定字段前端赋值无效的功能
  • [ ] 创建时间、修改时间字段改回bigint,java为Long,在大批量查询业务时,无需转换时间对象,以便提高性能,适应大数据处理项目。
  • [ ] Entity 接口添加 formatTimestamp(Function gettingMapper) 、setupTimestamp(String dateTime, Function settingMapper)方法,方便在调试阶段查看和设置 Long 类型字段的日期时间
    • 使用方式:entity.formatTimestamp(User::getCreateTime)、entity.setupTimestamp("2022-01-01 12:00:00", User::setCreateTime)
  • [ ] 优化前端传递的查询条件是空字符串时,在最终的sql执行上,需要支持用户是需要查询字段为空的情况,还是不需要过滤字段的情况
    • 例如用户传递 /auth-service/user?username=&age=10 时,是需要查询 username 为空的情况,还是不需要过滤 username 字段
  • [ ] 查询接口新增支持主从表关联查询(一对一和一对多),支持查询主表时,自动关联从表查询。

4、其他(Q4)

  • [ ] 回顾常用开源许可证协议,将 isass 在用的协议修改为更宽松的协议
  • [ ] 配置文件统一改为 toml 格式,合并原来的 yml 和 properties 文件。toml 文件放到 resources/config 目录下
  • [ ] 利用好 docker 分层技术,使 docker 镜像在集群环境中拉取时体积更小,提升部署效率。
    • 研究对比 springboot3 提供的 docker 集成方式,选择使用原生的 dockerfile 还是 springboot3 提供的 docker 集成方式
    • 取消 fat jar 的构建包方式,改为 lib 外置(需确认这个 docker layer 是否会被复用)