171 lines
5.2 KiB
Markdown
171 lines
5.2 KiB
Markdown
# 任务21:配置模板生成器
|
||
|
||
## 任务描述
|
||
实现配置模板生成器,用于生成安装包构建的配置文件模板。配置模板生成器将帮助用户快速创建符合要求的配置文件,包括YAML和JSON格式,并提供不同类型应用程序的模板选项。
|
||
|
||
## 实现步骤
|
||
|
||
1. 定义模板生成器接口:
|
||
- 在`internal/template`包中创建`generator.go`文件
|
||
- 定义TemplateGenerator接口:
|
||
```go
|
||
type TemplateGenerator interface {
|
||
// Generate 生成配置模板
|
||
Generate(options GenerateOptions) error
|
||
|
||
// GetAvailableTemplates 获取可用的模板类型
|
||
GetAvailableTemplates() []TemplateInfo
|
||
}
|
||
```
|
||
- 定义GenerateOptions结构体:
|
||
```go
|
||
type GenerateOptions struct {
|
||
TemplateName string // 模板名称
|
||
OutputPath string // 输出路径
|
||
Format string // 输出格式 (yaml, json)
|
||
AppName string // 应用名称
|
||
AppVersion string // 应用版本
|
||
Description string // 应用描述
|
||
Author string // 作者信息
|
||
License string // 许可证信息
|
||
Platforms []string // 目标平台
|
||
Architectures []string // 目标架构
|
||
PackageTypes []string // 包类型
|
||
Variables map[string]string // 自定义变量
|
||
}
|
||
```
|
||
- 定义TemplateInfo结构体:
|
||
```go
|
||
type TemplateInfo struct {
|
||
Name string // 模板名称
|
||
Description string // 模板描述
|
||
Category string // 模板类别
|
||
Tags []string // 模板标签
|
||
}
|
||
```
|
||
|
||
2. 创建默认模板生成器:
|
||
- 创建`default_generator.go`文件
|
||
- 定义DefaultTemplateGenerator结构体,实现TemplateGenerator接口:
|
||
```go
|
||
type DefaultTemplateGenerator struct {
|
||
templates map[string]string
|
||
logger log.Logger
|
||
resourceMgr resource.ResourceManager
|
||
}
|
||
```
|
||
- 实现构造函数:
|
||
```go
|
||
func NewDefaultTemplateGenerator(logger log.Logger, resourceMgr resource.ResourceManager) *DefaultTemplateGenerator {
|
||
generator := &DefaultTemplateGenerator{
|
||
templates: make(map[string]string),
|
||
logger: logger,
|
||
resourceMgr: resourceMgr,
|
||
}
|
||
|
||
// 注册内置模板
|
||
generator.registerBuiltinTemplates()
|
||
|
||
return generator
|
||
}
|
||
```
|
||
|
||
3. 实现模板注册:
|
||
- 创建registerBuiltinTemplates方法,注册内置模板
|
||
- 实现简单应用模板
|
||
- 实现Web应用模板
|
||
- 实现桌面应用模板
|
||
- 实现服务应用模板
|
||
|
||
4. 实现模板生成:
|
||
- 实现Generate方法,生成配置模板
|
||
- 根据模板名称选择模板
|
||
- 应用用户提供的选项
|
||
- 根据格式输出YAML或JSON
|
||
|
||
5. 实现模板渲染:
|
||
- 创建renderTemplate方法,渲染模板
|
||
- 使用Go模板引擎
|
||
- 支持条件渲染
|
||
- 支持循环渲染
|
||
|
||
6. 实现模板验证:
|
||
- 创建validateTemplate方法,验证生成的模板
|
||
- 确保生成的模板符合配置模型
|
||
- 提供验证错误信息
|
||
- 支持修复常见错误
|
||
|
||
7. 实现模板自定义:
|
||
- 创建customizeTemplate方法,自定义模板
|
||
- 支持用户提供的变量
|
||
- 支持条件包含和排除
|
||
- 支持模板组合
|
||
|
||
8. 实现模板查询:
|
||
- 实现GetAvailableTemplates方法,获取可用的模板类型
|
||
- 提供模板信息和描述
|
||
- 支持按类别和标签过滤
|
||
- 支持搜索模板
|
||
|
||
## 单元测试要求
|
||
|
||
1. 测试模板注册:
|
||
- 验证内置模板注册
|
||
- 测试模板加载
|
||
- 测试模板覆盖
|
||
- 测试无效模板处理
|
||
|
||
2. 测试模板生成:
|
||
- 验证Generate方法
|
||
- 测试不同的选项组合
|
||
- 测试YAML和JSON格式
|
||
- 测试错误处理
|
||
|
||
3. 测试模板渲染:
|
||
- 验证renderTemplate方法
|
||
- 测试变量替换
|
||
- 测试条件渲染
|
||
- 测试循环渲染
|
||
|
||
4. 测试模板验证:
|
||
- 验证validateTemplate方法
|
||
- 测试有效模板
|
||
- 测试无效模板
|
||
- 测试错误修复
|
||
|
||
5. 测试模板自定义:
|
||
- 验证customizeTemplate方法
|
||
- 测试变量替换
|
||
- 测试条件包含和排除
|
||
- 测试模板组合
|
||
|
||
6. 测试模板查询:
|
||
- 验证GetAvailableTemplates方法
|
||
- 测试模板信息
|
||
- 测试过滤功能
|
||
- 测试搜索功能
|
||
|
||
## 依赖关系
|
||
|
||
- 依赖任务01(项目初始化)
|
||
- 依赖任务02(日志系统实现)
|
||
- 依赖任务03(错误处理框架)
|
||
- 依赖任务04(资源管理器实现)
|
||
- 依赖任务05(配置模型定义)
|
||
- 依赖任务08(配置验证器)
|
||
- 被任务20(命令行界面)依赖
|
||
|
||
## 完成标准
|
||
|
||
1. TemplateGenerator接口已定义并文档完善
|
||
2. DefaultTemplateGenerator实现了所有接口方法
|
||
3. 内置模板注册功能正常工作
|
||
4. 模板生成功能正常工作
|
||
5. 模板渲染功能正常工作
|
||
6. 模板验证功能正常工作
|
||
7. 模板自定义功能正常工作
|
||
8. 模板查询功能正常工作
|
||
9. 所有单元测试通过
|
||
10. 代码符合项目的Go语言开发规范
|
||
11. 生成的模板符合配置模型要求
|
||
12. 支持所有需求文档中的模板相关功能 |