123 lines
3.9 KiB
Markdown
123 lines
3.9 KiB
Markdown
# 任务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. 验证器能够处理各种错误情况并提供友好的错误信息 |