installerbuilder/tasks/task08-配置验证器.md

3.9 KiB
Raw Permalink Blame History

任务08配置验证器

任务描述

实现配置验证器,用于验证配置模型的有效性,包括必填字段、值范围、格式等。配置验证器将确保构建过程使用的配置符合预期,避免因配置错误导致的构建失败。

实现步骤

  1. 定义配置验证器接口:

    • 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{}
      }
      
  2. 实现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
      }
      
  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配置模型定义
  • 被任务06YAML配置解析器和任务07JSON配置解析器依赖

完成标准

  1. ConfigValidator接口已定义并文档完善
  2. SchemaValidator实现了所有接口方法
  3. 配置模式定义完整,覆盖所有配置字段
  4. 基本验证功能正常工作
  5. 高级验证功能正常工作
  6. 自定义验证规则功能正常工作
  7. 错误收集和报告功能正常工作
  8. 所有单元测试通过
  9. 代码符合项目的Go语言开发规范
  10. 验证器能够处理各种错误情况并提供友好的错误信息