---
paths:
  - "**/*.php"
  - "**/composer.json"
---

# PHP 设计模式

> 本文档在 [common/patterns.md](../common/patterns.md) 的基础上，补充了 PHP 相关的内容。

## 精炼控制器，明确服务

* 保持控制器专注于传输层：认证、验证、序列化、状态码。
* 将业务规则移至应用/领域服务中，这些服务无需 HTTP 引导即可轻松测试。

## DTO 与值对象

* 对于请求、命令和外部 API 负载，用 DTO 替代结构复杂的关联数组。
* 对于货币、标识符、日期范围和其他受约束的概念，使用值对象。

## 依赖注入

* 依赖于接口或精简的服务契约，而非框架全局变量。
* 通过构造函数传递协作者，这样服务就无需依赖服务定位器查找，易于测试。

## 边界

* 当模型层职责超出持久化时，应将 ORM 模型与领域决策隔离。
* 将第三方 SDK 封装在小型的适配器之后，使代码库的其余部分依赖于你的契约，而非它们的。

## 参考

关于端点约定和响应格式的指导，请参见技能：`api-design`。
