本文记录了我如何将一个典型毕业设计项目(EduCore)通过模块拆分与工程重构,转化为具备企业级潜力的后端模板系统的全过程。包含目录演进、模块划分思路、踩坑经历、重构策略以及我对系统架构理解的阶段性总结。
💡 起因:项目结构"能跑但不能复用"
这个项目最开始是为了应对毕业设计需求开发的,技术栈用的是 Vue + Spring Boot + MyBatis Plus。整体功能虽然能跑,但结构上存在很多痛点:
- 所有模块(用户、权限、课程)都堆在
controller/service/mapper
一堆; - 缺少统一响应结构、全局异常、日志、配置封装;
- 权限控制完全靠前端控制展示菜单,后端没做任何拦截;
- 没有抽象可复用的通用逻辑,不适合后续维护或演示;
❌ 原始目录结构(简化后)
erlang
src
├── controller
│ ├── UserController.java
│ ├── CourseController.java
│ └── ...
├── service
├── mapper
├── entity
├── config
└── ...
虽然功能可用,但你一看就知道这是典型的"临时拼凑项目"。
🎯 目标:通用化、模块化、可维护
我希望这个项目不仅能用于交付,也能成为后续接单或做开源模板的技术资产。因此我为它设定了以下结构性目标:
- 明确分层(edu 模块 vs 权限模块 vs 通用模块);
- 所有公共配置、响应、异常处理集中统一;
- 权限系统为后续 RBAC 升级预留入口;
- 可以直接拿来接单、复用、演示。
🛠️ 重构方案:模块拆分 + 结构分层
我参考了一些企业级项目模板,结合自己的业务场景,设计了如下结构:
✅ 目录结构(使用 tree -L 2
展示)
bash
src
├── main
│ ├── java
│ │ └── com.zapcoman.educore
│ │ ├── common # 通用工具/返回结构/全局异常
│ │ ├── core # 配置类(Swagger/MyBatis/跨域等)
│ │ ├── log # AOP 日志切面
│ │ ├── module
│ │ │ ├── edu # 教学业务模块(课程/班级/学生等)
│ │ │ └── system # 用户、角色、权限模块
│ │ └── EduCoreApplication.java
│ └── resources
│ ├── application.yml
│ └── mapper
├── test
└── ...
📦 各模块职责说明
模块路径 | 说明 |
---|---|
common |
通用响应封装(ApiResponse<T> )、全局异常、工具类 |
core |
Spring Boot 项目配置集中管理(Swagger、MyBatis Plus、全局跨域等) |
log |
AOP 日志切面,记录请求与操作审计,后续可扩展操作日志存储 |
module-system |
权限模块(用户、角色、菜单、权限控制等) |
module-edu |
业务模块(课程、班级、教师、学生),与权限模块解耦 |
EduCoreApplication |
项目入口,后续支持模块按需加载 |
🔁 重构过程中的关键处理
✅ 响应封装:统一接口格式
使用泛型包装返回数据,统一成功/失败结构:
java
public class ApiResponse<T> {
private Integer code;
private String message;
private T data;
...
}
✅ 异常管理:全局捕获
通过 @ControllerAdvice + @ExceptionHandler
实现错误拦截和友好提示。
✅ 权限预留:后端结构隔离
虽然权限控制当前仍靠前端(登录时记录用户权限,动态展示菜单),但后端已经独立出 module-system
,方便未来加入 RBAC 拦截器、注解控制等。
🚧 当前项目状态(截至 2025-07)
模块 | 完成度 | 说明 |
---|---|---|
目录结构 | ✅ | 模块清晰,结构合理,方便后续迭代 |
通用封装 | ✅ | 响应封装、异常处理已集成,返回结构统一 |
权限设计 | ⚠️ | 仅前端控制,后端无权限拦截,后续考虑加入 RBAC 实现 |
通用工具 | ✅ | 日志切面、分页处理等工具模块初步具备 |
接口文档 | ✅ | 集成 Swagger,后续准备升级到 Knife4j |
测试覆盖 | ⛔ | Service 层尚无单元测试,考虑未来引入 JUnit + Mockito |
自动部署 | ⛔ | 尚无 Dockerfile,计划作为"开源模板"阶段加入 |
🎯 下一阶段目标
把它变成真正能用于生产交付的系统模板。
- ✅ 把前端权限控制升级为后端鉴权(JWT + 权限拦截器);
- ✅ 加入接口限流、操作日志落库、Excel 导入导出等企业级能力;
- ✅ 增加单元测试与部署脚本(Dockerfile + compose);
- ✅ 编写使用手册、模块说明、权限说明等开源级文档;
🧠 一些体会
- 不要小看"项目目录结构"这件事,它是系统长期可维护的基石;
- 重构最好在功能实现完毕后统一做,不然改一次崩一次;
- 模块结构清晰后,"加功能"才不会变成"加灾难";
- 如果你也打算把自己的毕业设计打造成开源项目,建议第一步就从目录结构入手。
📎 项目地址
📌 尾声
我正在计划把这个项目持续打磨成一个可直接拿来做毕设、做接单、做开源的 Spring Boot + Vue 模板系统,包括权限管理、用户体系、日志、通用组件、部署脚本等内容。后续也会同步到掘金进行系列化更新,欢迎关注。
如你有任何建议或使用需求,也欢迎评论区一起交流!