3.4 KiB
3.4 KiB
架构说明
一、子服务内部分层(DDD + CQRS)
每个子服务(如 rc-service-other)都遵循以下固定分层:
{service}-adapter # 适配层:Controller,对外 REST API
{service}-application # 应用层:ServiceImpl、CmdExe、QryExe、Manager、Scheduler
{service}-client # 客户端接口层:Service 接口、Cmd、CO、枚举
{service}-domain # 领域层:Entity、领域服务接口(纯业务,无框架依赖)
{service}-infrastructure # 基础设施层:DAO、DatabaseService、Gateway、缓存、MQ
{service}-inner-endpoint # 内部服务端点:供其他微服务 Feign 调用的实现
{service}-start # 启动模块:Spring Boot 入口、application.yml
二、层次调用链
HTTP 请求
↓
Controller(adapter)
↓
ServiceImpl(application)
↓
CmdExe / QryExe(application)
↓ 简单场景 ↓ 复杂场景
DatabaseService Gateway(封装锁+缓存+多数据源)
↓ ↓
DAO DAO / Redis / MongoDB
强制规则:
- Controller 只调用 Service
- Service 只调用 CmdExe/QryExe
- CmdExe 可直接调用 DatabaseService(简单)或 Gateway(复杂)
- 禁止跨层调用
三、跨服务调用(Feign)
调用方服务
└── 注入 Feign 客户端(来自 rc-inner-api/{service}-inner/{service}-inner-api)
rc-inner-api/
└── {service}-inner/
├── {service}-inner-api/ # Feign 接口定义(endpoint 包)
├── {service}-inner-model/ # 传输数据模型(model 包)
└── (实现在 {service}-inner-endpoint 子服务中)
四、文件路径速查(以 other 服务为例)
| 文件类型 | 路径 |
|---|---|
| Controller | other-adapter/src/.../adapter/app/{模块}/ |
| Service 接口 | other-client/src/.../app/service/{模块}/ |
| Cmd / QryCmd | other-client/src/.../app/dto/cmd/{模块}/ |
| CO(返回对象) | other-client/src/.../app/dto/clientobject/{模块}/ |
| CmdExe | other-application/src/.../app/command/{模块}/ |
| QryExe | other-application/src/.../app/command/{模块}/query/ |
| ServiceImpl | other-application/src/.../app/service/{模块}/ |
| Manager | other-application/src/.../app/manager/{模块}/ |
| Gateway 接口+实现 | other-infrastructure/src/.../infra/gateway/{模块}/ |
| DAO | other-infrastructure/src/.../infra/database/rds/dao/ |
| Entity | other-infrastructure/src/.../infra/database/rds/entity/ |
| DatabaseService | other-infrastructure/src/.../infra/database/rds/service/ |
| MongoDB | other-infrastructure/src/.../infra/database/mongo/ |
| Cache | other-infrastructure/src/.../infra/database/cache/ |
| Inner API 接口 | rc-inner-api/other-inner/other-inner-api/endpoint/{模块}/ |
| Inner Model | rc-inner-api/other-inner/other-inner-model/model/{模块}/ |
| Inner 实现 | other-inner-endpoint/src/.../app/inner/service/{模块}/ |
五、常见功能模块目录名
user / room / activity / game / family / gift / task / material / ranking / vip
六、Gateway 使用原则
需要 Gateway 的场景:分布式锁、缓存+DB 双写、多数据源聚合、复杂事务协调
不需要 Gateway 的场景:简单 CRUD、单表查询、无缓存的简单操作
原则:简单直接,复杂封装,不过度设计