ballcat icon indicating copy to clipboard operation
ballcat copied to clipboard

【意见收集】代码结构调整

Open Hccake opened this issue 2 years ago • 11 comments

考虑后续将此仓库再进行一次拆分与结构调整:

1. 将所有的业务模块迁移到独立仓库

新建一个业务仓库 ballcat-business,将 ballcat-system、ballcat-log 、ballcat-i18n 等等业务模块迁移过去。

2. 此模块只保留与业务无关的功能模块和自动配置模块

功能模块:ballcat-framework 和 自动配置模块:ballcat-starter

  • 将 ballcat-common 和 ballcat-extend 的相关模块整合为 ballcat-framework 模块
  • 将 ballcat-starter 中的所有模块进行拆分,功能代码迁移到 ballcat-framework 模块中,starter 中仅保留自动配置类。
  • 功能模块命名精简,如 ballcat-common-websocket 迁移后将改为 ballcat-websocket

3. 依赖管理模块拆分

目前的 ballcat-dependency 模块中,既管理了 ballcat 本身项目的相关依赖,又管理了 ballcat 所依赖的第三方依赖,考虑拆分为 ballcat-bom 和 ballcat-dependency,一个管理 ballcat 自身,一个管理第三方依赖

由于涉及到的改动较大,~~所以预计在升级 spring-boot 3.x 时处理,来个大版本更新~~

在 2.0 版本进行模块改动 在 3.0 版本进行升级 springboot3.x + java17,正好可以版本对齐

如果大家对模块拆分有更好的建议欢迎在此指出,集思广益

group id 和 包名需要统一整改

剔除 hccake 的个人名称,目前由于 ballcat.com 域名已经被他人购买 所以考虑替换为 cn.ballcat 或者 org.ballcat

Hccake avatar Apr 11 '22 15:04 Hccake

参考 spring-boot 早期组织结构,新增 ballcat-parent,父工程调整为 ballcat-build,可以从 parent 中分离出一些不需要透传给用户的东西

Hccake avatar Apr 24 '22 03:04 Hccake

能否将权限模块单独抽离出来? 当需要权限模块的时候,引入权限模块和对接口进行权限标识,达到对资源的管控 当不需要权限模块,不引入权限模块,所有资源都是开放的

Mokaful avatar Apr 29 '22 07:04 Mokaful

能否将权限模块单独抽离出来? 当需要权限模块的时候,引入权限模块和对接口进行权限标识,达到对资源的管控 当不需要权限模块,不引入权限模块,所有资源都是开放的

@Mokaful 不好意思。没有太听懂,你的意思是接口的权限拦截校验全部去掉是吗?

如果只是这个需求,现在就是支持的: 注册一个 CustomPermissionEvaluator 类型的 bean,重写其 hasPermission 方法,永远返回 true 即可取消 ballcat 自带模块中所有接口的权限控制

Hccake avatar Apr 29 '22 12:04 Hccake

有没有计划迁移到gradle

ccwxl avatar May 03 '22 13:05 ccwxl

有没有计划迁移到gradle

如果项目模块达到一定量级的话,考虑迁移。 暂时模块数量不多,使用 maven 构建心智负担比较低

Hccake avatar May 03 '22 17:05 Hccake

比如ballcat-businesssystem 是不是不需要在分maven子模块(controller, modle, biz). 直接一个模块即可. 简单.

ccwxl avatar May 04 '22 08:05 ccwxl

比如ballcat-businesssystem 是不是不需要在分maven子模块(controller, modle, biz). 直接一个模块即可. 简单.

是的,用户实际使用 ballcat-boot 模板上开发的单体业务是不需要做拆分的。 ballcat 这个仓库主要是依赖仓库,用户不需要关心。拆分是为了方便用户按需组合使用,方便用户使替换对应的模块,比如现在的授权服务器,就可以独立出来,只引入 system-biz,即可完成登录鉴权等控制。

但是为了方便的复用代码到后续的 cloud 项目支持,后面这个模块划分还是需要调整的,对于异构服务可能大家按照 api 文档开发,java 服务间,还是暴露出来一个 api 的模块供其他服务接入会好点(api 里面需要有基本传输的 vo 以及 dto),方便同步升级。

目前整体的思路还没有定好,你如果有对于兼容 cloud 使用的好的模块划分方案可以推荐下

Hccake avatar May 04 '22 09:05 Hccake

代码格式建议:将tab修改为空格(主流)。 IDE提交自动格式化或者习惯性按了格式化快捷键都会因为tab被替换成了空格而出现大量改动

evil0th avatar Feb 17 '23 14:02 evil0th

tab 和 空格每个人都有自己的喜好,这个重口难调,目前 ballcat 遵循 spring 规范,使用 tab 作为缩进,暂不考虑改动。

格式化快捷键的问题,你可以下载安装 spring-javaformat 提供的 idea 插件,将 idea 的格式化快捷键改为使用该插件处理即可避免此问题。

2.x 版本后对将取消 ballcat 父工程中的插件传递,是否使用该格式化插件交给业务开发者选择。 (目前可以取消使用 ballcat 作为父工程,使用 import ballcat-dependencies 的方式来管理依赖)

Hccake avatar Feb 18 '23 07:02 Hccake

2.x 版本 pom 计划改动:

  • 参考 springboot 1.x 版本,父项目拆分为 ballcat-build 和 ballcat-parent,build 复制管理项目内部打包编译要的插件,parent 负责管理依赖(引入 dependency)和子模块,保证了 ballcat 内部的默认的格式化校验、flatten、profile 等插件的使用,同时不再传递给用户。

  • 添加 git 本地钩子管理,ballcat 的开发者必须在提交时进行格式化

  • 添加 deploy-snapshot 和 deploy-release 的 profile, 分别在开发者 commit 和 release 的时候进行自动发布快照和对应的 release 版本

Hccake avatar Mar 06 '23 03:03 Hccake

2.x 版本 系统模块拆分 用户相关(用户, 组织, 角色 权限, 菜单) 移入 user 配置相关(系统配置, 字典) 移入 infrastructure

lingting avatar Mar 24 '23 10:03 lingting