JavaProjectRepo/系统代码结构框架规划.md

9.1 KiB
Raw Blame History

系统代码结构框架规划

1. 目标与原则

1.1 业务目标

  • framework 模块:沉淀系统级通用能力(安全、认证、权限、日志、任务调度、文件、缓存、监控、通用工具等),不依赖任何业务代码,可被 N 个业务模块复用
  • business-css 模块:仅聚焦“临界事故情景分析”业务,零系统代码,所有共性能力通过 framework 提供

1.2 设计原则

原则 落地要求
高内聚低耦合 业务模块只依赖 frameworkframework 绝不反向依赖业务
DRY 同一能力只在一个地方实现framework禁止业务模块重复造轮子
可演进 后续新增业务模块business-xxx零改动即可接入现有能力
可维护 通过 Maven 多模块 + 分层分包,让“修改点”收敛到最小范围

2. 多模块 Maven 结构(聚合工程)

d:\JavaProjectSpace (root pom, packaging=pom)
├── framework (com.yfd:platform:1.0)
│   ├── src/main/java
│   ├── src/main/resources
│   └── pom.xml
├── business-css (com.yfd:business-css:1.0-SNAPSHOT)
│   ├── src/main/java
│   ├── src/main/resources
│   └── pom.xml
└── pom.xml   ← modules 声明

3. framework 模块职责与目录

3.1 职责矩阵

能力域 是否包含 说明
统一配置 数据源、Redis、Jackson、MyBatis-Plus、Swagger、监控、日志、加解密等
安全 & 认证 Spring Security + JWT 过滤器、权限注解、匿名访问标记
系统级 API 用户/角色/菜单/部门/字典/日志/文件/消息/定时任务等
通用工具 RSA、Excel、IP 归属、验证码、异步线程池、缓存封装
前端静态 仅提供全局通用静态(如 404、error、swagger-ui业务页面由业务模块提供
业务代码 禁止出现任何与“临界事故”相关的类、表、API

3.2 代码分层

src/main/java/com/yfd/platform
├── config               # 自动配置类DataSource、Security、Async、Redis、MyBatisPlus...
│   ├── bean             # @ConfigurationProperties 配置属性类
│   ├── thread           # 线程池配置
│   └── ...
├── constant             # 系统级常量
├── exception            # 全局异常 + 自定义业务异常基类
├── annotation           # 系统注解(@Log、@AnonymousAccess 等)
├── aspect               # 系统级 AOP操作日志、权限校验
├── datasource           # 动态数据源切换(若业务需要多库)
├── utils                # 通用工具RSA、Excel、IP、验证码、SpringContextHolder...
├── system               # 系统管理域(用户/角色/菜单/部门/字典/日志/文件/消息/任务)
│   ├── domain           # PO / DTO / VO注意仅系统表
│   ├── mapper           # MyBatis-Plus Mapper
│   ├── service          # Service 接口 + 实现
│   └── controller       # REST API/api/system/*
└── component            # 非业务组件WebSocket、SSE、任务执行器

3.3 资源目录

src/main/resources
├── mapper/system/*.xml          # 仅系统表 SQL 映射
├── static                       # 全局通用静态swagger、error、login 背景图等)
├── banner.txt / logback.xml     # 统一启动 Banner & 日志
└── application*.yml             # 框架级默认配置数据源、redis、监控、线程池...

注意framework 绝不放业务 SQL、业务静态页面业务资源全部下沉到业务模块。


4. business-css 模块职责与目录

4.1 职责矩阵

能力域 是否包含 说明
业务领域代码 临界事故实体、服务、控制器、DTO、Mapper XML
业务静态页面 仅与“临界事故”相关的页面、图片、图标
系统能力 通过依赖 framework 获得,禁止复制粘贴
系统表 SQL 系统表由 framework 提供,业务模块只写业务表

4.2 代码分层

src/main/java/com/yfd/business/css
├── model          # 业务实体 / DTO / VO仅业务表
├── mapper         # MyBatis-Plus Mapper 接口
├── service        # 业务服务接口 + 实现
├── controller     # REST API/api/css/* 或 /api/simulation/*
└── *Application.java

4.3 资源目录

src/main/resources
├── mapper/css/*.xml   # 仅业务表 SQL 映射
├── static/css/*       # 业务静态(页面、图片、图标)
└── application.yml    # 业务个性化配置(端口、数据源 URL、业务开关

5. 依赖关系与 Maven 坐标

模块 坐标 依赖
framework com.yfd:platform:1.0 无业务依赖仅技术栈Spring Boot、MyBatis-Plus、Security、Redis...
business-css com.yfd:business-css:1.0-SNAPSHOT com.yfd:platform:1.0plain classifier

plain classifierframework 通过 maven-jar-plugin 额外生成 platform-1.0-plain.jar,仅含 classes & resources不含 Spring-Boot 启动器,避免业务模块引入重复主类。


6. 配置隔离策略

配置项 放在哪里 示例
数据源、Redis、MyBatis、线程池、监控、日志 framework framework/src/main/resources/application.yml
业务开关、业务参数、端口、上下文 business-css business-css/src/main/resources/application.yml
环境差异化dev/prod 各自模块 application-dev.ymlapplication-prod.yml

启动顺序:业务模块的 application.yml 会覆盖 framework 的同名 key实现“共性 + 个性”组合。


7. 静态资源隔离策略

资源类型 放在哪里 访问路径 说明
全局通用swagger、error、login 背景) framework /error/swagger-ui.html 所有业务模块共用
业务页面(.html、.js、*.png business-css /css/index.html 仅当前业务使用
业务接口 business-css /api/simulation/* REST 无静态冲突

最佳实践:业务静态统一放在 /static/{业务简称}/ 目录,避免文件名冲突。


8. 数据库隔离策略

表归属 模块 说明
系统表sys_user、sys_role、sys_menu... framework 由 framework 提供 Mapper & XML业务模块只读/调用 Service
业务表css_simulation、css_record... business-css 由业务模块自行创建 Mapper & XML禁止写入系统表 SQL

多业务共享同一库:系统表前缀 sys_,业务表前缀 css_xxx_,物理共存但逻辑隔离。


9. 启动与部署

9.1 开发阶段

# 1. 安装 framework 到本地仓库
mvn -DskipTests clean install -pl framework

# 2. 启动业务模块(自动依赖 framework
mvn -DskipTests spring-boot:run -pl business-css

9.2 交付阶段

# 一次性打包所有模块
mvn -DskipTests clean package

# 产物
framework/target/platform-1.0.jar          # 系统后台服务(可选独立部署)
business-css/target/business-css-1.0-SNAPSHOT.jar  # 业务服务(含内嵌 Tomcat

部署方式

  • 轻量场景:只部署 business-css-1.0-SNAPSHOT.jar,内嵌 framework 能力
  • 分离场景:独立部署 platform-1.0.jar(提供统一后台),再部署多个业务 jar网关统一路由

10. 横向扩展新增业务模块business-xxx

  1. 新建 Maven 模块 business-xxxparent 指向根 pom
  2. 依赖 com.yfd:platform:1.0:plain
  3. 包名 com.yfd.business.xxx
  4. 表前缀 xxx_
  5. 静态资源 /static/xxx/
  6. API 前缀 /api/xxx/
  7. 端口 8083(避免与 css 冲突)

零改动接入:无需复制任何系统代码,仅需以上 7 步即可拥有完整的用户/权限/日志/文件/任务能力。


11. 常见误区与禁止项

误区 正确做法
把系统表 SQL 写在业务模块 系统 SQL 只能放在 framework/mapper/system
把系统静态页面login、404复制到业务模块 全局静态统一收敛到 framework/static
业务模块直接依赖 platform-1.0.jar(可执行) 使用 platform-1.0-plain.jar(仅 classes
framework 里出现“css”字样 framework 必须业务无关,出现业务代码即重构
多个业务模块端口重复 每个业务模块独立端口8082、8083...

12. 演进路线

阶段 动作
当前 单库多模块Maven 聚合,静态/配置/表逻辑隔离
下一步 引入 Spring Cloud Gateway统一路由 & 鉴权,业务模块只关注领域逻辑
未来 业务模块拆分为独立微服务docker-compose/k8sframework 作为共享 lib 或 sidecar

一句话总结framework 做“平台”business-css 做“产品”;平台沉淀,产品迭代,互不污染,横向复制。