# 架构说明

## 一、子服务内部分层（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、单表查询、无缓存的简单操作

**原则：简单直接，复杂封装，不过度设计**
