LEARNING PATH 02

Spring,不止是注解

以订单生命周期为主线,建立企业项目的分层、边界、规则和测试策略。

依赖方向

API — HTTP、校验、DTO、错误映射
Application — 编排用例与事务边界
Domain — 订单规则、状态与仓储接口
Infrastructure — 数据库、消息、外部系统实现

1. Spring 的角色:组装应用

Controller 接收 HTTP,Service 暴露用例,Repository 提供持久化实现。构造器注入让依赖显式且可替换。最重要的订单规则仍是普通 Java,不启动 Spring 也能测试。

2. 领域模型守住业务不变量

空订单不能提交、已提交订单不能修改、数量必须为正。规则放在 Order/OrderLine 内,而不是散落在 Controller。

判断:业务语言描述的规则通常属于领域;“先调 A 再调 B”通常属于应用服务。

3. 企业 API 边界

请求 DTO 用 Bean Validation 拦截结构错误;Controller 映射到 OrderView;异常由 Advice 统一变成 Problem Detail。真实项目还应加入 trace id、鉴权、分页与版本策略。

4. 测试金字塔

OrderServiceTest 用 Fake 快速验证规则;OrderControllerTest 启动 Spring 上下文,验证 JSON、校验和 HTTP 状态。前者多且快,后者少而关键。

./mvnw test
./mvnw spring-boot:run

5. 向生产演进

  1. 用 JPA/PostgreSQL 实现仓储接口。
  2. 增加事务边界与乐观锁。
  3. 用 Outbox 可靠发布订单事件。
  4. 加入 Testcontainers、可观测性和鉴权。

开始 Quiz →