Visual LabINTERACTIVE LEARNING
04 · BUSINESS BACKENDP013 MIN

Controller、Service 与 Repository

按职责拆分 HTTP 适配、业务规则与持久化,让核心逻辑可测试可复用。

MENTAL MODELBACKEND LAYERS
01HTTP Controller
02Application Service
03Domain Rule
04Repository
05Database
Controller 翻译协议,Service 编排业务,Repository 隔离数据访问;依赖方向应朝向业务而非框架细节。
01 · CONCEPTS & BOUNDARIES

先把概念与边界说清楚

定义告诉你它是什么,边界告诉你它不负责什么;企业系统最常见的误解通常发生在两者混用时。

01

Controller

解析 HTTP 输入、调用用例并把结果映射成响应。

02

Service

实现业务用例,协调权限、事务、领域规则、Repository 与事件。

03

Repository

提供面向业务的持久化操作,集中查询、租户范围和锁策略。

02 · BLIND BOTS CASE

三个入口都要取消订单

问题现场

REST、后台任务和客服脚本各复制一套取消逻辑,库存释放结果不同。

  1. 01

    把 cancelOrder 放进应用 Service。

  2. 02

    三种入口只负责适配各自协议。

  3. 03

    Repository 提供条件迁移与库存操作。

得到什么

一套业务规则被多入口复用,测试也不需要启动 HTTP 服务。

03 · PRACTICE

马上动手

  1. 把 createOrder 伪代码按三层归类。
  2. 识别授权应放 Controller 还是 Service。
04 · PITFALLS

常见坑

  • Controller 直接调用 ORM 完成所有事
  • Repository 承担业务状态机
  • Service 之间循环依赖
05 · KNOWLEDGE CHECK授权为什么不能只放 Controller?查看答案⌄
答案

同一用例可能被队列、脚本或 GraphQL 调用;关键授权和数据范围必须靠近用例边界,避免非 HTTP 入口绕过。