You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
RuoYi-Vue/docs/architecture/architecture-overview.md

265 lines
19 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# RuoYi-Vue 架构概览
> **项目版本**: 3.8.0 | **分析日期**: 2026-06-28
> **前端**: Vue 2.6.12 + Element UI 2.15.6 | **后端**: Spring Boot 2.5.8 + JDK 1.8
---
## 1. 系统总体架构
### 1.1 系统架构图
```
┌─────────────────────────────────────────────────────────────────────────┐
│ 浏览器客户端 │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ 前端层 (Vue 2 SPA) │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │ │
│ │ │ Views │ │ Layout │ │ Store │ │ Router │ │ Components │ │ │
│ │ │ (40+页) │ │(侧边栏/ │ │ (Vuex 5 │ │(静态+ │ │ (22个组件组)│ │ │
│ │ │ │ │ 标签页) │ │ modules)│ │动态路由) │ │ │ │ │
│ │ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └──────┬──────┘ │ │
│ │ └───────────┴───────────┴───────────┴─────────────┘ │ │
│ │ │ │ │
│ │ ┌────────┴────────┐ │ │
│ │ │ Axios 封装层 │ ← 请求/响应拦截器、错误处理 │ │
│ │ └────────┬────────┘ │ │
│ └───────────────────────────┼───────────────────────────────────────┘ │
└──────────────────────────────┼──────────────────────────────────────────┘
│ HTTP/JSON (Bearer Token)
┌──────────────────────────────────────────────────────────────────────────┐
│ 后端服务层 │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ ruoyi-admin (启动层 & Controller 层 — 28 个 Controller) │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐ │ │
│ │ │ 系统管理(13) │ │ 监控管理(5) │ │ 业务模块(6) │ │ 工具/公共(4) │ │ │
│ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬───────┘ │ │
│ │ └───────────────┴───────────────┴───────────────┘ │ │
│ │ │ │ │
│ │ ┌─────────────────────────┴──────────────────────────────┐ │ │
│ │ │ ruoyi-framework (框架核心层) │ │ │
│ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────┐ │ │ │
│ │ │ │ Security │ │ AOP 切面 │ │ Config │ │ Redis/JWT │ │ │ │
│ │ │ │ (认证/ │ │ (4个切面) │ │ (12个配置)│ │ (Token管理)│ │ │ │
│ │ │ │ 授权) │ │ │ │ │ │ │ │ │ │
│ │ │ └──────────┘ └──────────┘ └──────────┘ └───────────┘ │ │ │
│ │ └─────────────────────────┬──────────────────────────────┘ │ │
│ │ │ │ │
│ │ ┌──────────────┬───────┴───────┬──────────────┐ │ │
│ │ ▼ ▼ ▼ ▼ │ │
│ │ ┌──────┐ ┌──────────┐ ┌──────────┐ ┌────────────┐ │ │
│ │ │ruoyi │ │ book- │ │ stock- │ │ ruoyi- │ │ │
│ │ │system│ │ system │ │ system │ │ quartz │ │ │
│ │ │(12S │ │ (6S/6M) │ │ (9M) │ │ /generator │ │ │
│ │ │ 12M) │ │ │ │ │ │ │ │ │
│ │ └──────┘ └──────────┘ └──────────┘ └────────────┘ │ │
│ │ │ │ │
│ │ ┌─────────────────────────┴──────────────────────────────┐ │ │
│ │ │ ruoyi-common (通用工具层) │ │ │
│ │ │ BaseController / AjaxResult / BaseEntity / 注解 / │ │ │
│ │ │ 工具类(20+) / 异常类 / 过滤器 / 常量 / 分页组件 │ │ │
│ │ └────────────────────────────────────────────────────────┘ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────┐
│ 数据层 │
│ ┌──────────────────────┐ ┌────────────────────────────┐ │
│ │ MySQL 数据库 │ │ Redis 缓存 │ │
│ │ ┌────────────────┐ │ │ ┌──────────────────────┐ │ │
│ │ │ sys_* 系统表 │ │ │ │ login_tokens:{uuid} │ │ │
│ │ │ book_* 账本表 │ │ │ │ 用户会话 / Token │ │ │
│ │ │ stock_* 股票表 │ │ │ ├──────────────────────┤ │ │
│ │ │ quartz_* 任务表 │ │ │ │ 限流计数器 │ │ │
│ │ │ gen_* 生成器表 │ │ │ ├──────────────────────┤ │ │
│ │ └────────────────┘ │ │ │ 配置缓存 / 字典缓存 │ │ │
│ └──────────────────────┘ │ └──────────────────────┘ │ │
│ └────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────┘
```
### 1.2 分层说明
| 层级 | 职责 | 关键技术 |
|------|------|---------|
| **前端展示层** | 页面渲染、用户交互、路由导航、状态管理 | Vue 2 SPA、Element UI、Vuex、Vue Router |
| **API 通信层** | 前后端 HTTP 通信、Token 携带、错误统一处理 | Axios + 拦截器、JWT Bearer Token |
| **Controller 层** | 请求接收、参数校验、权限注解、响应封装 | Spring MVC、@PreAuthorize、@Log |
| **框架核心层** | 安全认证、AOP 切面、数据源路由、全局配置 | Spring Security、JWT、AspectJ、Druid |
| **Service 层** | 业务逻辑、事务管理、数据权限过滤 | @Transactional、@DataScope |
| **Mapper 层** | SQL 映射、动态查询、结果集映射 | MyBatis + XML + PageHelper |
| **Domain 层** | 实体模型、基类继承、VO/DTO 传输 | BaseEntity、TreeEntity |
| **数据存储层** | 持久化存储、会话缓存、限流计数 | MySQL 5.7+、Redis |
---
## 2. 技术栈总结
### 2.1 前端技术栈
| 分类 | 技术 | 版本 | 用途 |
|------|------|------|------|
| 核心框架 | Vue.js | 2.6.12 | 渐进式 MVVM 框架 |
| UI 组件库 | Element UI | 2.15.6 | 桌面端组件库 |
| 路由管理 | Vue Router | 3.4.9 | SPA 路由(含动态路由) |
| 状态管理 | Vuex | 3.6.0 | 集中式状态管理5 个模块) |
| HTTP 客户端 | Axios | 0.24.0 | HTTP 请求封装 |
| 构建工具 | Vue CLI | 4.4.6 | 项目脚手架 |
| CSS 预处理 | Sass | 1.32.13 | 样式预处理器 |
| 图表库 | ECharts | 4.9.0 | 数据可视化 |
| 富文本编辑器 | Quill | 1.3.7 | 富文本编辑 |
| 代码高亮 | highlight.js | 9.18.5 | 代码语法高亮 |
| 拖拽排序 | vuedraggable | 2.24.3 | 列表拖拽 |
| SVG 图标 | svg-sprite-loader | 5.1.1 | SVG 雪碧图 |
| 加密 | jsencrypt | 3.2.1 | RSA 密码加密 |
| 进度条 | NProgress | 0.2.0 | 页面加载进度 |
| Cookie | js-cookie | 3.0.1 | Cookie 读写 |
### 2.2 后端技术栈
| 分类 | 技术 | 版本 | 用途 |
|------|------|------|------|
| 核心框架 | Spring Boot | 2.5.8 | 快速开发框架 |
| JDK | Java | 1.8 | 运行环境 |
| 安全框架 | Spring Security | 内置 | 认证与授权 |
| JWT | jjwt | 0.9.1 | Token 签发与验证 |
| ORM | MyBatis | 2.2.0 (starter) | SQL 映射框架 |
| 分页插件 | PageHelper | 1.4.0 | 物理分页 |
| 连接池 | Druid | 1.2.8 | 数据库连接池 + 监控 |
| 缓存 | Spring Data Redis | 内置 | 会话缓存、限流 |
| API 文档 | Springfox Swagger 3 | 3.0.0 | 接口文档 |
| JSON 解析 | FastJSON | 1.2.79 | JSON 序列化 |
| Excel 处理 | Apache POI | 4.1.2 | Excel 导入导出 |
| 验证码 | Kaptcha | 2.3.2 | 图形验证码 |
| 代码生成 | Velocity | 2.3 | 模板引擎 |
| 系统监控 | Oshi | 5.8.6 | 服务器信息采集 |
| 定时任务 | Quartz | 内置 | 任务调度 |
### 2.3 数据库技术栈
| 技术 | 用途 | 说明 |
|------|------|------|
| MySQL 5.7+ | 主数据库 | 系统表(sys_*)、业务表(book_*/stock_*)、任务表(quartz_*) |
| Redis | 缓存/会话 | Token 存储(login_tokens:{uuid})、限流计数器、配置缓存 |
---
## 3. 模块划分
### 3.1 模块清单
| 模块名 | 类型 | 职责 | 核心内容 |
|--------|------|------|----------|
| **ruoyi-admin** | 启动模块 | Spring Boot 启动入口Controller 层聚合 | 启动类、28 个 Controller、Swagger 配置、打包部署 |
| **ruoyi-framework** | 框架核心 | 安全认证、AOP 切面、数据源、全局配置 | Security、JWT、4 个切面、12 个配置类、异步管理 |
| **ruoyi-system** | 系统管理 | 系统基础业务 | 用户/角色/菜单/部门/字典/岗位/日志 (12 Service + 12 Mapper) |
| **ruoyi-common** | 通用工具 | 基类、工具类、注解、异常、常量 | BaseController、AjaxResult、BaseEntity、20+ 工具类 |
| **ruoyi-generator** | 代码生成 | Velocity 模板驱动的代码生成器 | 表结构查询、模板渲染、2 个 Mapper |
| **ruoyi-quartz** | 定时任务 | 基于 Quartz 的任务调度管理 | 任务 CRUD、执行日志、2 个 Mapper |
| **book-system** | 账本业务 | 账务管理业务模块 | 账户/账本/操作记录/统计 (6 Service + 6 Mapper) |
| **stock-system** | 股票业务 | 股票分析业务模块 | 股票信息/行情/财务/趋势 (9 Mapper) |
### 3.2 模块依赖图
```
┌─────────────┐
│ ruoyi-admin │ ← 启动入口,打包部署
└──────┬──────┘
│ depends on
┌───────────────┼───────────────┐
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌─────────────┐
│ ruoyi- │ │ ruoyi- │ │ ruoyi- │
│ system │ │ quartz │ │ generator │
└──────┬─────┘ └──────┬─────┘ └──────┬──────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────┐
│ ruoyi-framework │
│ (Security, AOP, DataSource, Redis, Config)│
└──────────────────────┬──────────────────────┘
│ depends on
┌───────────────┼───────────────┐
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌─────────────┐
│ book- │ │ stock- │ │ ruoyi- │
│ system │ │ system │ │ common │
└────────────┘ └────────────┘ └─────────────┘
```
**依赖规则**
- `ruoyi-admin` → 依赖所有业务模块 + framework
- 业务模块 (`ruoyi-system` / `book-system` / `stock-system` / `quartz` / `generator`) → 依赖 `ruoyi-framework`
- `ruoyi-framework` → 依赖 `ruoyi-common`
- `ruoyi-common` → 无内部依赖(底层基础模块)
---
## 4. 关键设计模式
### 4.1 MVC 模式
```
Controller (ruoyi-admin)
│ 接收请求、参数校验、权限控制
Service (各业务模块)
│ 业务逻辑、事务管理
Mapper (各业务模块)
│ SQL 映射、数据访问
Domain (ruoyi-common / 各模块)
实体模型、基类继承
```
- **Controller**: 统一继承 `BaseController`,获得 `startPage()`、`getDataTable()`、`toAjax()` 等通用方法
- **Service**: 接口 + 实现分离 (`ISysUserService` / `SysUserServiceImpl`)
- **Mapper**: MyBatis XML 映射 + Java 接口,大量使用动态 SQL
- **Domain**: `BaseEntity``TreeEntity` 继承体系
### 4.2 分层架构
**物理分层**Maven 多模块)与 **逻辑分层**Controller → Service → Mapper相结合
```
┌───────────────────────────────────────────┐
│ ruoyi-admin → Controller 层 (表现层) │
├───────────────────────────────────────────┤
│ ruoyi-framework → 框架支撑层 (横切关注点) │
├───────────────────────────────────────────┤
│ ruoyi-system → Service/Mapper (业务层) │
│ book-system → Service/Mapper (业务层) │
│ stock-system → Service/Mapper (业务层) │
├───────────────────────────────────────────┤
│ ruoyi-common → Domain/工具类 (基础层) │
└───────────────────────────────────────────┘
```
### 4.3 AOP 切面
| 切面 | 注解 | 通知类型 | 优先级 | 用途 |
|------|------|---------|--------|------|
| **DataSourceAspect** | `@DataSource` | `@Around` | `@Order(1)` | 多数据源动态切换 |
| **DataScopeAspect** | `@DataScope` | `@Before` | — | 数据权限 SQL 注入 |
| **LogAspect** | `@Log` | `@AfterReturning` / `@AfterThrowing` | — | 操作日志异步记录 |
| **RateLimiterAspect** | `@RateLimiter` | `@Before` | — | Redis 限流控制 |
### 4.4 其他设计模式
| 模式 | 应用场景 | 实现方式 |
|------|---------|---------|
| **单例模式** | Spring Bean 默认作用域 | 配置类 (`SecurityConfig`、`DruidConfig` 等) 通过 `@Configuration` + `@Bean` 实现 |
| **工厂模式** | 异步任务创建 | `AsyncFactory` 创建不同类型的异步任务(操作日志、登录日志) |
| **策略模式** | 数据权限过滤 | `@DataScope` 注解根据不同数据范围类型(全部/本部门/本人等)生成不同的 SQL 过滤策略 |
| **模板方法模式** | BaseController | 基类定义通用流程(分页、响应),子类 Controller 继承复用 |
| **责任链模式** | Spring Security 过滤器链 | `CorsFilter → JwtAuthenticationTokenFilter → AuthenticationFilter` 依次处理 |
| **代理模式** | MyBatis Mapper | MyBatis 通过动态代理生成 Mapper 接口实现 |
| **观察者模式** | Spring 事件机制 | `AsyncManager` 通过线程池异步处理任务,解耦日志写入与主流程 |
---
*文档结束*