RuoYi 项目模块划分与依赖传递总结
RuoYi 项目模块划分与依赖传递总结
RuoYi 是一个经典的 Java 后台管理框架,模块化设计是其核心之一。如何合理划分模块、处理模块间依赖、明确工具类和服务的归属,对于构建可维护、易扩展的系统尤为关键。
🗂 模块划分原则
1️⃣ 按职责分层划分
模块 | 说明 |
---|---|
ruoyi-common |
通用工具、基础封装、无状态方法、第三方 SDK 集成 |
ruoyi-framework |
Web 框架封装:Spring Boot、Spring Security、MyBatis 等适配层 |
ruoyi-system |
系统级服务模块:用户、角色、菜单、字典、OSS、邮件等 |
ruoyi-generator |
代码生成器模块,用于 CRUD 快速生成 |
ruoyi-quartz |
定时任务调度模块 |
ruoyi-job |
(可选)业务级定时任务逻辑 |
ruoyi-api |
对外接口层(微服务版拆出) |
ruoyi-admin |
Web 管理后台主入口 |
✅ 单体版:模块组合在一个应用内;
✅ 微服务版:模块拆分成独立微服务,通过 OpenFeign 调用。
2️⃣ 按依赖关系层次划分
common
→ 最底层,不依赖其他业务模块;framework
→ 依赖common
;system
→ 依赖common
和framework
;admin
→ 依赖system
,但不应反向依赖。
1 | graph TD |
🔗 模块间依赖传递策略
✅ 工具类依赖传递
- 放
ruoyi-common
- 示例:
DateUtils
,BeanUtils
,RedisUtils
。 - 无状态、线程安全。
- 示例:
- 其他模块通过依赖
common
引入工具类。
✅ 服务依赖传递
- 放
ruoyi-system
- 示例:
SysEmailService
,SysOssService
。 - 系统能力服务,提供统一业务入口。
- 示例:
- 其他模块通过依赖
system
调用服务接口。
🚨 禁止反向依赖
比如
system
不应依赖admin
,否则会导致模块耦合,难以拆分。
🛠 工具类 vs 服务放置原则
类型 | 推荐模块 | 说明 |
---|---|---|
工具类 | common/utils |
纯工具封装,无状态逻辑 |
封装 SDK | common |
第三方 SDK 初始化,如邮件、OSS 的底层封装 |
系统级服务 | system/service |
有状态、需读取配置表(如 sys_config ) |
业务逻辑服务 | 业务模块 |
针对具体业务逻辑实现,如订单、库存等 |
🌟 示例
📧 邮件发送
- EmailUtils →
ruoyi-common
- SysEmailService →
ruoyi-system
- 调用:
SysEmailService.sendEmail(to, subject, content)
📦 OSS 存储
- OssUtils →
ruoyi-common
- SysOssService →
ruoyi-system
- 调用:
SysOssService.upload(file)
📖 总结
- 🏗 模块职责单一,工具类与服务层分离;
- 🚫 禁止模块间环形依赖;
- ✅ 通用封装放
common
,系统能力放system
; - ⚡ 微服务化后,
system
可拆为独立服务(如 OSS 服务、邮件服务)。