43 lines
1.9 KiB
Markdown
43 lines
1.9 KiB
Markdown
server/
|
||
├── models/ # 仅负责数据模型相关
|
||
│ ├── 结构体(struct)定义
|
||
│ ├── 字段标签与表名(TableName)
|
||
│ └── 数据库初始化(注册模型、连接数据库)
|
||
│
|
||
├── services/ # 核心业务逻辑层
|
||
│ ├── 所有业务处理方法(含CRUD)
|
||
│ ├── 模型数据校验
|
||
│ ├── 密码等安全相关加解密
|
||
│ └── 与 models 层的数据库操作
|
||
│
|
||
└── controllers/ # 控制器层,专注 HTTP
|
||
├── 请求参数解析
|
||
├── 参数有效性验证
|
||
├── 调用 services 处理业务
|
||
└── 响应数据统一格式化与错误处理
|
||
|
||
|
||
## 分层架构开发规范
|
||
|
||
### Models 层
|
||
- 只负责定义数据库结构和初始化,包含结构体、字段标签与表名映射,数据库注册与连接。
|
||
- 不允许包含任何业务逻辑、数据校验、密码处理或和 HTTP 相关的代码。
|
||
|
||
### Services 层
|
||
- 实现所有业务流程、数据访问、校验和跨模型业务逻辑。
|
||
- 通过 models 操作数据库,仅返回 struct 或错误。
|
||
- 实现数据校验、密码加密等业务需求;不直接处理 HTTP 请求或响应。
|
||
|
||
### Controllers 层
|
||
- 只负责接收和解析 HTTP 请求,进行参数校验。
|
||
- 调用 services 执行业务逻辑。
|
||
- 负责返回统一格式的响应结果,对业务错误进行捕获和转义为 HTTP 状态码和消息。
|
||
|
||
### 其它要求
|
||
- 各层代码职责单一,禁止跨层调用(如 controllers 直接操作 models)。
|
||
- 统一异常处理,业务错误只在 services 返回,controllers 负责转换为 HTTP 响应。
|
||
- 保持 controller 轻量简洁,绝不包含业务处理逻辑。
|
||
- services 层所有数据变更、校验等均可单元测试。
|
||
- models 变动需清晰文档和数据库迁移脚本。
|
||
|
||
建议先设计 models 层,随后 services 层,最后实现 controllers,实现过程中注意分层原则。 |