用途:在 Python 项目中创建不可变领域值对象(value object),使用 frozen dataclass 模式,配合校验、工厂方法,并在类型系统层面保证不可变性。触发场景包括“为 X 创建值对象”“实现不可变 Y 值”“为 Z 值添加校验”等。
主要能力与步骤:1) 用 @dataclass(frozen=True) 定义不可变结构,字段构造后不可修改;2) 在 post_init 中做校验,失败抛 ValueError,类型转换或归一化需用 object.setattr() 修改冻结字段,直接赋值会触发 FrozenInstanceError;3) 添加工厂方法,如 from_string、from_dict、from_content、from_components、from_bytes;4) 添加 str 与 repr 字符串表示,长值可在 repr 中截断;5) 添加领域行为,如 @property 计算属性、模式匹配、to_dict 序列化;6) 补全类型注解与文档。
适用场景:需要在领域层表达已校验、不可变概念(如邮箱地址、路径、哈希、身份标识)时使用。常见模式包括计算属性、冻结上下文中的类型强制、自定义错误校验、字典序列化与反序列化。
使用方式:文件通常放在 domain/value_objects/ 或 domain/values/ 目录,命名如 file_path.py、identity.py。配套提供三个工具脚本:分析代码库并建议值对象候选、生成带校验/工厂方法/测试的值对象、校验现有值对象模式。
限制:要求 Python 3.10+(dataclass 与 X | None 类型联合语法);基础值对象无外部依赖,快速哈希可选装 xxhash(uv pip install xxhash)。测试建议覆盖校验、不可变性、相等性、工厂方法与序列化往返。其余安装与平台信息暂未提供。