SuperAPI AI 工具集

value-objects-and-dtos

编程与开发

查看项目

更新于 10-15 21:08

技能介绍

用途:当带有自身规则的领域概念(如金额、邮箱、地址)以原始标量形式传递,或数据需要跨越边界(请求输入、API 输出、消息载荷),以及需要在 Doctrine 实体中存储值对象时使用本技能。

主要能力:区分值对象与 DTO——值对象承载领域不变量,DTO 承载跨边界数据;将对象设为 readonly,在构造器中校验并快速失败;值对象按值相等,修改操作返回新实例;值对象以 Doctrine embeddable 方式持久化;输入 DTO(校验约束)与输出 DTO(序列化属性)分离。

使用方式:按默认工作流执行——先判断用值对象还是 DTO,再实现不可变与构造器校验,为值对象实现按值相等与返回新实例的操作,用 embeddable 持久化,并分别维护输入与输出 DTO 及其与实体的映射。

适用场景:领域建模、请求输入与 API 输出、消息载荷、Doctrine 实体中嵌入值对象。

限制与护栏:不使用 setter,不允许可变,任何变更都返回新实例;DTO 只携带数据、不含行为;绝不将实体直接作为 API 输入或输出;金额以最小单位的整数存储,绝不用浮点数。输出契约包括值对象及其不变量与相等性、输入输出 DTO 及其与实体的映射、每个不变量的单元测试。深入实现细节可参考 reference.md。