分层解耦实践:路由、服务与模型的边界

路由只处理请求与响应,业务规则集中在服务层,模型只描述数据结构——边界清晰,修改才可控。

分层解耦实践:路由、服务与模型的边界

「把代码分文件夹」不等于分层。真正的分层是职责边界:谁可以依赖谁,谁不应该知道什么。

三层的职责

路由层:解析参数、调用服务、选择模板或状态码。它不应该出现 SQL 查询,也不应该拼装业务规则。

服务层:所有业务规则、权限判断、事务提交、缓存失效都集中在这里。它不直接读取 request,因此可以被 CLI、定时任务和测试复用。

模型层:表结构、关系与少量领域属性,例如「文章是否已发布」。模型不负责发送邮件、不负责生成响应。

一个反例

@bp.post("/posts")
def create_post():
    data = request.form.to_dict()
    post = Post(**data)          # 路由直接操作模型
    db.session.add(post)
    db.session.commit()
    cache.clear()
    return redirect("/blog")

这段代码把校验、持久化与缓存策略写死在路由里,新增后台导入功能时只能复制一遍。

改造后的调用链

route → post_service.create_post(data) → model + cache + commit

路由变得只剩三行,业务规则也只有一份实现。

边界带来什么

  • 修改发布规则时只改服务层
  • 新增 CLI 导入功能时直接复用服务
  • 路由测试不再依赖数据库细节