71 lines
4.2 KiB
Markdown
71 lines
4.2 KiB
Markdown
# 4.1 整体架构概览
|
||
|
||
:::tip 概述
|
||
EasyGoAdmin 是前后端分离的多层架构:Vue3 单页应用通过统一信封与 Gin 后端交互,后端按"契约 → 接口 → 业务 → 数据"四件套分层,横切能力(认证、租户、日志、限流)全部收敛在中间件与全局钩子。
|
||
:::
|
||
|
||
## 总体拓扑
|
||
|
||
```text
|
||
┌─────────────────────────────────────────────┐
|
||
│ 浏览器(Vue3 + ElementPlus 单页应用) │
|
||
│ api 封装 · 动态菜单路由 · Pinia · v-permission│
|
||
└────────────────────┬────────────────────────┘
|
||
│ /api/**(统一 JSON 信封)
|
||
┌────────────────────▼────────────────────────┐
|
||
│ Gin HTTP 层 │
|
||
│ 中间件链:trace→CORS→metrics→response→ │
|
||
│ ratelimit→demo→JWT→tenant→authz→op_log │
|
||
│ │ │
|
||
│ router.Bind 反射注册(RouteSpec 表即路由) │
|
||
└────────────────────┬────────────────────────┘
|
||
│ 签名固定的方法调用
|
||
┌────────────────────▼────────────────────────┐
|
||
│ 四件套业务层 │
|
||
│ handler(极薄委托)→ service(ModuleSpec │
|
||
│ 声明 + 手写逻辑)→ repository(Ctx 入口) │
|
||
│ dto(契约与校验标签) │
|
||
└────────────────────┬────────────────────────┘
|
||
│ GORM(全局钩子盖章 + Scope 注入)
|
||
┌────────────────────▼────────────────────────┐
|
||
│ 数据层:MySQL / PostgreSQL / SQL Server / │
|
||
│ SQLite / Oracle(+ Redis 缓存,失败降级内存) │
|
||
└─────────────────────────────────────────────┘
|
||
```
|
||
|
||
## 设计原则
|
||
|
||
| 原则 | 落点 |
|
||
|---|---|
|
||
| 一处声明,多处生效 | RouteSpec 同源驱动注册/权限/日志/公开/OpenAPI;ModuleSpec 声明驱动查询/输出/写入 |
|
||
| 红线在入口执行,不靠自觉 | 软删过滤与租户隔离在 `Ctx(ctx)` 注入;物理删除被钩子拦截;审计字段钩子补齐 |
|
||
| 薄接口层,厚业务层 | handler 只委托;规则在 service;数据在 repository |
|
||
| 契约稳定 | dto json 标签名即 API 字段名,前后端与生成器共同依赖 |
|
||
| fail-fast + 优雅降级 | 配置非法拒绝启动;Redis 缺失降级内存;接线缺失告警降级(WireCheck) |
|
||
| 合法逃生舱 | 写不进声明的复杂逻辑手写方法,不硬塞框架 |
|
||
|
||
## 请求的一生(简版)
|
||
|
||
1. 中间件链逐层处理(追踪、跨域、指标、响应包裹、限流、演示、认证、租户、鉴权、日志采集)
|
||
2. `router.Bind` 包装函数按 path > body > query 绑定参数并校验
|
||
3. handler 委托 service;service 经 ModuleSpec / 手写逻辑完成业务
|
||
4. repository.Ctx 在 SQL 构建前注入红线条件
|
||
5. 结果回到 response 中间件统一封装信封返回;操作日志异步落库
|
||
|
||
逐层展开见 [4.2 请求处理链路](/zh/architecture/request-flow.html)。
|
||
|
||
## 代码域划分
|
||
|
||
| 域 | 位置 | 职责边界 |
|
||
|---|---|---|
|
||
| 装配 | internal/server、cmd/api | 启动序列、优雅关闭 |
|
||
| HTTP | internal/router、internal/middleware | 路由注册与横切处理 |
|
||
| 业务 | internal/handler/service/repository/model/dto | 四件套 |
|
||
| 基础设施 | utility/* | 无业务语义的通用能力 |
|
||
| 后台任务 | internal/task | 定时任务(init 自注册) |
|
||
| 前端 | ui/* | 独立工程,经信封对接 |
|
||
|
||
## 下一步
|
||
|
||
→ [4.2 请求处理链路](/zh/architecture/request-flow.html)
|