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