mcpField
V
value-objects-and-dtos

value-objects-and-dtos

github.com/dev-toolings开发22791 次安装3 周前更新
代码仓库

关于 value-objects-and-dtos

面向 Symfony 开发的技能,用值对象表达领域概念,用 DTO 承载边界数据。指导不可变设计、Doctrine 持久化及不变量测试。

主要功能

  1. 01区分值对象与 DTO
  2. 02构造时校验不可变值
  3. 03按值比较并以新实例执行操作
  4. 04将值对象持久化为 Doctrine 嵌入对象
  5. 05分离输入与输出 DTO
  6. 06为各项不变量编写测试

适用场景

  1. 01用值对象替代领域概念的原始标量
  2. 02建模请求及 API 边界数据
  3. 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 实体中存储值对象。

默认工作流

  1. 做出选择:对具有不变量的领域概念使用值对象;对跨越边界的数据使用 DTO。
  2. 将其设为 readonly,在构造函数中进行验证,并尽早失败。
  3. 为值对象实现按值相等,以及返回新实例的操作。
  4. 将值对象作为 Doctrine 可嵌入对象持久化。
  5. 将输入 DTO(验证约束)与输出 DTO(序列化器属性)分开。

防护措施

  • 不使用 setter,不进行修改:变更应返回新实例。
  • DTO 只承载数据,不包含行为。
  • 绝不直接将实体作为 API 输入或输出。
  • 将金钱存储为以最小货币单位表示的整数,绝不使用浮点数。

渐进式披露

  • 使用此文件了解执行规范和风险控制。
  • 需要深入了解实现细节时,打开参考资料。

输出约定

  • 包含不变量和相等性逻辑的值对象。
  • 输入和输出 DTO,以及它们与实体之间的映射。
  • 针对每个不变量的单元测试。

参考资料

  • reference.md

评论

支持 Markdown