# 任务08:配置验证器 ## 任务描述 实现配置验证器,用于验证配置模型的有效性,包括必填字段、值范围、格式等。配置验证器将确保构建过程使用的配置符合预期,避免因配置错误导致的构建失败。 ## 实现步骤 1. 定义配置验证器接口: - 在`internal/config/validator`包中创建`validator.go`文件 - 定义ConfigValidator接口: ```go type ConfigValidator interface { // Validate 验证配置是否有效 Validate(config *model.Config) error // ValidateField 验证特定字段是否有效 ValidateField(config *model.Config, fieldPath string) error // GetSchema 获取验证模式 GetSchema() interface{} } ``` 2. 实现JSON Schema验证器: - 创建`schema_validator.go`文件 - 定义SchemaValidator结构体,实现ConfigValidator接口: ```go type SchemaValidator struct { schema *jsonschema.Schema logger log.Logger } ``` - 实现构造函数: ```go func NewSchemaValidator(schemaData []byte, logger log.Logger) (*SchemaValidator, error) { schema, err := jsonschema.CompileString("config-schema.json", string(schemaData)) if err != nil { return nil, err } return &SchemaValidator{ schema: schema, logger: logger, }, nil } ``` 3. 创建配置模式定义: - 在`internal/config/schema`包中创建JSON Schema定义文件 - 定义配置的JSON Schema,包括所有字段的验证规则 - 支持复杂的验证规则,如依赖字段、条件验证等 4. 实现基本验证功能: - 验证必填字段 - 验证字段类型 - 验证字段格式(如版本号、路径等) - 验证字段范围(如数值范围、字符串长度等) 5. 实现高级验证功能: - 验证字段间的依赖关系 - 验证条件字段(如当A=x时,B必须存在) - 验证互斥字段(如A和B不能同时存在) - 验证字段组合(如至少需要A、B、C中的一个) 6. 实现自定义验证规则: - 创建自定义验证函数 - 支持特定于应用的验证规则 - 支持插件定义的验证规则 7. 实现错误收集和报告: - 收集所有验证错误,而不是在第一个错误时停止 - 提供详细的错误信息,包括字段路径和错误原因 - 支持错误分类和优先级 ## 单元测试要求 1. 测试基本验证功能: - 验证必填字段验证 - 测试字段类型验证 - 测试字段格式验证 - 测试字段范围验证 2. 测试高级验证功能: - 验证字段依赖关系验证 - 测试条件字段验证 - 测试互斥字段验证 - 测试字段组合验证 3. 测试自定义验证规则: - 验证自定义验证函数 - 测试特定于应用的验证规则 - 测试插件验证规则 4. 测试错误收集和报告: - 验证错误收集功能 - 测试错误信息的详细程度 - 测试错误分类和优先级 5. 测试边界情况: - 验证空配置的处理 - 测试最小有效配置 - 测试复杂配置 ## 依赖关系 - 依赖任务01(项目初始化) - 依赖任务02(日志系统实现) - 依赖任务03(错误处理框架) - 依赖任务05(配置模型定义) - 被任务06(YAML配置解析器)和任务07(JSON配置解析器)依赖 ## 完成标准 1. ConfigValidator接口已定义并文档完善 2. SchemaValidator实现了所有接口方法 3. 配置模式定义完整,覆盖所有配置字段 4. 基本验证功能正常工作 5. 高级验证功能正常工作 6. 自定义验证规则功能正常工作 7. 错误收集和报告功能正常工作 8. 所有单元测试通过 9. 代码符合项目的Go语言开发规范 10. 验证器能够处理各种错误情况并提供友好的错误信息