关于 value-objects-and-dtos
面向 Symfony 开发的技能,用值对象表达领域概念,用 DTO 承载边界数据。指导不可变设计、Doctrine 持久化及不变量测试。
主要功能
- 01区分值对象与 DTO
- 02构造时校验不可变值
- 03按值比较并以新实例执行操作
- 04将值对象持久化为 Doctrine 嵌入对象
- 05分离输入与输出 DTO
- 06为各项不变量编写测试
适用场景
- 01用值对象替代领域概念的原始标量
- 02建模请求及 API 边界数据
- 03在 Doctrine 实体中存储值对象
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dev-toolings/ superpowers-symfony --skill value-objects-and-dtos安装后在 Claude Code 中输入/value-objects-and-dtos确认已加载。
附带文件reference.md
详细介绍
值对象与 DTO(Symfony)
适用场景
- 具有自身规则的领域概念(金钱、电子邮件、地址)以原始标量形式传递。
- 数据跨越边界:请求输入、API 输出、消息负载。
- 在 Doctrine 实体中存储值对象。
默认工作流
- 做出选择:对具有不变量的领域概念使用值对象;对跨越边界的数据使用 DTO。
- 将其设为
readonly,在构造函数中进行验证,并尽早失败。 - 为值对象实现按值相等,以及返回新实例的操作。
- 将值对象作为 Doctrine 可嵌入对象持久化。
- 将输入 DTO(验证约束)与输出 DTO(序列化器属性)分开。
防护措施
- 不使用 setter,不进行修改:变更应返回新实例。
- DTO 只承载数据,不包含行为。
- 绝不直接将实体作为 API 输入或输出。
- 将金钱存储为以最小货币单位表示的整数,绝不使用浮点数。
渐进式披露
- 使用此文件了解执行规范和风险控制。
- 需要深入了解实现细节时,打开参考资料。
输出约定
- 包含不变量和相等性逻辑的值对象。
- 输入和输出 DTO,以及它们与实体之间的映射。
- 针对每个不变量的单元测试。
参考资料
reference.md
评论
支持 Markdown