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

123 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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