分层解耦实践:路由、服务与模型的边界
路由只处理请求与响应,业务规则集中在服务层,模型只描述数据结构——边界清晰,修改才可控。
分层解耦实践:路由、服务与模型的边界
「把代码分文件夹」不等于分层。真正的分层是职责边界:谁可以依赖谁,谁不应该知道什么。
三层的职责
路由层:解析参数、调用服务、选择模板或状态码。它不应该出现 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 导入功能时直接复用服务
- 路由测试不再依赖数据库细节