Skip to content

项目结构 ​

这篇解决什么 ​

分清工作区里各仓的职责,以及后端 Maven 怎么拆:BOM、框架、业务模块、单体入口、网关。改接口时知道 Admin / App 的 Controller 和 VO 为什么分开。

先把工程跑起来,见 快速开始。默认端口 48080,管理端前缀 /admin-api。

RuoYi Office 后端装配示意图

示意图:管理后台走 /admin-api,用户端走 /app-api,都进 yudao-server。

工作区 ​

RuoYi Office 按仓拆开,不是单一 Git 仓库。

名称说明仓库路径
后端Spring Boot 多模块,单体入口 YudaoServerApplicationruoyi-office/
PC 管理端Vue3 + Vben + Ant Design Vueruoyi-office-vben/apps/web-antd/
移动端UniAppruoyi-office-uniapp/
大屏GoViewruoyi-office-ui-go-view/
数据库脚本全量 dump 与按日增量ruoyi-office-db/

Java 根包是 cn.iocoder.yudao,Maven groupId 是 cn.iocoder.cloud。这是源码路径,改业务时跟着目录走即可。

单体用 -P boot,微服务用 -P cloud(默认)。

后端四类模块 ​

名称说明仓库路径
yudao-dependenciesBOM,统一依赖版本ruoyi-office/yudao-dependencies/
yudao-frameworkWeb、安全、MyBatis、缓存等 Starterruoyi-office/yudao-framework/
yudao-module-xxx业务模块,再拆 *-api 与 *-serverruoyi-office/yudao-module-*/
yudao-server单体容器,引入需要的 *-server 后启动ruoyi-office/yudao-server/
yudao-gateway微服务网关ruoyi-office/yudao-gateway/

框架组件 ​

每个 Starter 分 core 与 config。名字带 biz 的是业务向组件。

名称说明仓库路径
yudao-common基础 POJO、枚举、工具yudao-framework/yudao-common/
yudao-common-server服务侧公共能力yudao-framework/yudao-common-server/
yudao-spring-boot-starter-env环境与配置yudao-framework/yudao-spring-boot-starter-env/
yudao-spring-boot-starter-webWeb、全局异常、访问日志;Admin 前缀 /admin-apiyudao-framework/yudao-spring-boot-starter-web/
yudao-spring-boot-starter-securitySpring Security 认证授权yudao-framework/yudao-spring-boot-starter-security/
yudao-spring-boot-starter-mybatisMyBatis Plusyudao-framework/yudao-spring-boot-starter-mybatis/
yudao-spring-boot-starter-redisRedis + Redissonyudao-framework/yudao-spring-boot-starter-redis/
yudao-spring-boot-starter-websocketWebSocketyudao-framework/yudao-spring-boot-starter-websocket/
yudao-spring-boot-starter-mq消息队列yudao-framework/yudao-spring-boot-starter-mq/
yudao-spring-boot-starter-rpcFeign 调用yudao-framework/yudao-spring-boot-starter-rpc/
yudao-spring-boot-starter-job定时任务,接 XXL-Jobyudao-framework/yudao-spring-boot-starter-job/
yudao-spring-boot-starter-protection幂等、限流、分布式锁yudao-framework/yudao-spring-boot-starter-protection/
yudao-spring-boot-starter-excelEasyExcelyudao-framework/yudao-spring-boot-starter-excel/
yudao-spring-boot-starter-monitor监控与链路yudao-framework/yudao-spring-boot-starter-monitor/
yudao-spring-boot-starter-test单测yudao-framework/yudao-spring-boot-starter-test/
yudao-spring-boot-starter-biz-tenant多租户yudao-framework/yudao-spring-boot-starter-biz-tenant/
yudao-spring-boot-starter-biz-data-permission数据权限yudao-framework/yudao-spring-boot-starter-biz-data-permission/
yudao-spring-boot-starter-biz-ip地区与 IP 库yudao-framework/yudao-spring-boot-starter-biz-ip/

WebProperties 里 adminApi 默认 /admin-api,扫描 **.controller.admin.**。

业务模块 ​

yudao-server/pom.xml 用依赖决定单体装哪些模块。

名称说明单体引入仓库路径
yudao-module-system用户、角色、菜单、租户、字典是ruoyi-office/yudao-module-system/
yudao-module-infra代码生成、文件、任务、配置是ruoyi-office/yudao-module-infra/
yudao-module-mdm主数据是ruoyi-office/yudao-module-mdm/
yudao-module-bpm流程引擎是ruoyi-office/yudao-module-bpm/
yudao-module-oa协同办公是ruoyi-office/yudao-module-oa/
yudao-module-hrm人力资源是ruoyi-office/yudao-module-hrm/
yudao-module-contract合同是ruoyi-office/yudao-module-contract/
yudao-module-project项目是ruoyi-office/yudao-module-project/
yudao-module-asset资产是ruoyi-office/yudao-module-asset/
yudao-module-weiwork企业微信是ruoyi-office/yudao-module-weiwork/
yudao-module-crm客户关系是ruoyi-office/yudao-module-crm/
yudao-module-erp进销存是ruoyi-office/yudao-module-erp/
yudao-module-member会员是ruoyi-office/yudao-module-member/
yudao-module-pay支付是ruoyi-office/yudao-module-pay/
yudao-module-report报表 / 大屏是ruoyi-office/yudao-module-report/
yudao-module-mp公众号是ruoyi-office/yudao-module-mp/
yudao-module-mall商城(product / promotion / trade / statistics)是ruoyi-office/yudao-module-mall/
yudao-module-ai大模型是ruoyi-office/yudao-module-ai/
yudao-module-iot物联网是ruoyi-office/yudao-module-iot/
yudao-module-mes制造执行是ruoyi-office/yudao-module-mes/
yudao-module-wms仓储是ruoyi-office/yudao-module-wms/
yudao-module-im即时通讯是ruoyi-office/yudao-module-im/
yudao-module-finance财务 / 票据是ruoyi-office/yudao-module-finance/

分层与包 ​

每个业务模块拆两个 Maven 子模块。

api 与 server

示意图:契约在 *-api,实现在 *-server。

名称说明仓库路径
yudao-module-xxx-api给其它模块的接口、DTO、枚举yudao-module-xxx/yudao-module-xxx-api/
yudao-module-xxx-serverController、Service、DAL、ApiImplyudao-module-xxx/yudao-module-xxx-server/

三层 + 非严格分层:

分层

示意图。

名称说明仓库路径
controller.admin管理端 REST + VO例如 AuthController,@RequestMapping("/system/auth")
controller.app用户端 REST,类名 App*controller/app/
service接口 + *Impl例如 AdminUserService
dal.dataobject映表 DO例如 AdminUserDO
dal.mysqlMapper例如 AdminUserMapper
dal.redisRedisDAO,按 Key 收口例如 OAuth2AccessTokenRedisDAO
api模块间 Api + DTO + ImplAdminUserApi 在 system-api
mqMessage / Producer / Consumer各模块 mq/
job定时任务各模块 job/
enums枚举、ErrorCodeConstantsenums/
convertMapStruct例如 AuthConvert

对应 yudao-module-system 的包树:

Controller 包树

示意图,按 yudao-module-system-server 真实目录。

Service 包树

DAL 包树

模块间 API

为什么 Admin 和 App 拆开

同一功能的入参、出参、敏感字段不同。管理端查用户可以看更多字段,用户端不能把手机号等一并返回。

为什么不用 DO 当接口出入参

创建部门只该收 name、parentId。用 DO 会让 createTime、creator 也能被传入。Swagger 和校验也该挂在 VO 上,DO 只负责映表。代码生成器可以选「用 DO」,只适合很简单的页。

会员要发短信时,依赖 yudao-module-system-api,不要去碰对方 *-server 的内部类。

前端工程 ​

PC 用 Vben 的 web-antd。api/ 与 views/ 按后端模块同构。

名称说明仓库路径
PC 管理端页面与 APIruoyi-office-vben/apps/web-antd/src/views/、src/api/
移动端H5 / 小程序 / Appruoyi-office-uniapp/
大屏GoViewruoyi-office-ui-go-view/

配置与操作 ​

开发对照本仓库目录拆模块,不要另造分层。改包、加模块先看 pom 和 yudao-server 依赖。没有「项目结构」菜单。

开启见 框架层。示意图见上文。

相关篇 ​

联系我们

获取报价、演示和二开方案

微信咨询二维码

微信咨询

17156169080

添加时备注「RuoYi Office」

在线体验商业版