在 handler 里直接写 SQL,短期看少了一层,长期会让接口层承担参数解析、鉴权、事务、数据访问和响应组装所有职责。

我更习惯让 handler 做三件事:绑定请求、调用 service、返回响应。SQL 放 repository,事务边界放 service 或 usecase。

func Create(c *gin.Context) {
    var req CreateReq
    if bind(c, &req) { return }
    data, err := svc.Create(c.Request.Context(), req)
    render(c, data, err)
}

这样写不是为了层数好看,而是为了测试和修改边界清楚。接口变化不应该牵动 SQL,表结构变化也不应该牵动路由。

分类: Gin 实战 标签: Gin 数据库 分层

评论

-- 评论已关闭 --

全部评论