关于 controller-cleanup
面向 Symfony 开发的技能,通过将业务逻辑及相关职责移至专用组件来精简控制器。重点是保持 HTTP 行为不变,并用功能测试验证重构。
主要功能
- 01梳理控制器职责
- 02重构前测试 HTTP 行为
- 03将请求映射为经校验的 DTO
- 04提取服务、投票器和处理器
- 05让精简的控制器操作负责委派
- 06使用可调用的控制台命令
适用场景
- 01重构包含业务逻辑的控制器操作
- 02将校验与授权和持久化分离
- 03让控制台命令委派给共享服务
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dev-toolings/ superpowers-symfony --skill controller-cleanup安装后在 Claude Code 中输入/controller-cleanup确认已加载。
附带文件reference.md
详细介绍
控制器清理(Symfony)
适用场景
- 控制器操作中包含业务逻辑、查询,或代码行数不止几行。
- 在同一个操作中混杂了输入解析、验证、授权和持久化。
- 控制台命令自行完成实际工作,而不是委托处理。
默认工作流
- 列出该操作执行的内容:输入、验证、授权、业务逻辑、持久化、副作用。
- 移动任何内容之前,先用功能测试覆盖当前 HTTP 行为。
- 使用
#[MapRequestPayload]或#[MapQueryString]将输入映射到 DTO,并让验证器拒绝无效输入。 - 将业务逻辑移入服务或命令处理器,将授权移入投票器,将副作用移入事件或消息。
- 让操作仅负责解析、授权、委托和响应,控制在 5 到 10 行。
防护措施
- 将服务类型提示为参数或构造函数参数;切勿从容器中获取服务。
- 保持 HTTP 行为完全一致:状态码和负载都不变。
- 不要把逻辑移入一个只是换了新名字的旧控制器“管理器”。
- 将控制台入口编写为可调用的
#[AsCommand]类(Symfony 7.3+),并委托给相同的服务。
渐进式披露
- 使用此文件了解执行方式和风险控制。
- 需要深入的实现细节时,打开参考资料。
输出要求
- 精简的操作,只负责委托。
- 提取出的 DTO、服务、投票器或处理器,各自只承担一项职责。
- 功能测试证明 HTTP 行为保持不变。
参考资料
reference.md
评论
支持 Markdown