来自《芋道源码》:项目结构 | ruoyi-vue-pro 开发指南
Maven Module | 作用 | 列表 |
---|---|---|
yudao-dependencies | Maven 依赖版本管理 | |
yudao-framework | Java 框架拓展,每个 Maven Module 都是一个组件, 分技术组件和业务组件 | core 包:组件的核心封装,拓展相关的功能。 config 包:组件的 Spring Boot 自动配置。 |
yudao-module-xxx | XXX 功能的 Module 模块 | 1.yudao-module-xxx-api:提供给其它模块的 API 定义 2.yudao-module-xxx-biz:模块的功能的具体实现 |
yudao-server | 管理后台 + 用户 App 的服务端 |
疑问:为什么设计 `yudao-module-xxx-api` 模块呢?
- 明确需要提供给其它模块的 API 定义,方便未来迁移微服务架构。
- 模块之间可能会存在相互引用的情况,虽然说从系统设计上要尽量避免,但是有时在快速迭代的情况下,可能会出现。此时,通过只引用对方模块的 API 子模块,解决相互引用导致 Maven 无法打包的问题。
疑问:为什么 Controller 分成 Admin 和 App 两种?
提供给 Admin 和 App 的 RESTful API 接口是不同的,拆分后更加清晰。
疑问:为什么 VO 分成 Admin 和 App 两种?
相同功能的 RESTful API 接口,对于 Admin 和 App 传入的参数、返回的结果都可能是不同的。例如说,Admin 查询某个用户的基本信息时,可以返回全部字段;而 App 查询时,不会返回 mobile 手机等敏感字段。
疑问:为什么 DO 不作为 Controller 的出入参?
- 明确每个 RESTful API 接口的出入参。例如说,创建部门时,只需要传入 name、parentId 字段,使用 DO 接参就会导致 type、createTime、creator 等字段可以被传入,导致前端同学一脸懵逼。
- 每个 RESTful API 有自己独立的 VO,可以更好的设置 Swagger 注解、Validator 校验规则,而让 DO 保持整洁,专注映射好数据库表
疑问:为什么操作 Redis 需要通过 RedisDAO?
Service 直接使用 RedisTemplate 操作 Redis,导致大量 Redis 的操作细节和业务逻辑杂糅在一起,导致代码不够整洁。通过 RedisDAO 类,将每个 Redis Key 像一个数据表一样对待,清晰易维护。
疑问:如何抽象工作流