架构经验1

来自《芋道源码》:项目结构 | 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` 模块呢?

  1. 明确需要提供给其它模块的 API 定义,方便未来迁移微服务架构。
  2. 模块之间可能会存在相互引用的情况,虽然说从系统设计上要尽量避免,但是有时在快速迭代的情况下,可能会出现。此时,通过只引用对方模块的 API 子模块,解决相互引用导致 Maven 无法打包的问题。

疑问:为什么 Controller 分成 Admin 和 App 两种?

        提供给 Admin 和 App 的 RESTful API 接口是不同的,拆分后更加清晰。

疑问:为什么 VO 分成 Admin 和 App 两种?

        相同功能的 RESTful API 接口,对于 Admin 和 App 传入的参数、返回的结果都可能是不同的。例如说,Admin 查询某个用户的基本信息时,可以返回全部字段;而 App 查询时,不会返回 mobile 手机等敏感字段。

疑问:为什么 DO 不作为 Controller 的出入参?

  1. 明确每个 RESTful API 接口的出入参。例如说,创建部门时,只需要传入 name、parentId 字段,使用 DO 接参就会导致 type、createTime、creator 等字段可以被传入,导致前端同学一脸懵逼。
  2. 每个 RESTful API 有自己独立的 VO,可以更好的设置 Swagger 注解、Validator 校验规则,而让 DO 保持整洁,专注映射好数据库表

疑问:为什么操作 Redis 需要通过 RedisDAO?

        Service 直接使用 RedisTemplate 操作 Redis,导致大量 Redis 的操作细节和业务逻辑杂糅在一起,导致代码不够整洁。通过 RedisDAO 类,将每个 Redis Key 像一个数据表一样对待,清晰易维护。

架构经验1_第1张图片

疑问:如何抽象工作流

架构经验1_第2张图片

 

你可能感兴趣的:(架构设计,java)