关于配置代码生成器的构想
需求
目前项目组的开发工作流中,读取表格配置需要重复较多机械性的工作:首先是字段的名称和类型规定上有一定的心智负担,在多种使用渠道(如client,server)下可能要认为进行多次同步,其次是完成读表代码也比较模式化,理论上这些工作都可以由工具提供辅助并最终由工具生成代码。
功能概览
- 将表格的所有字段在工具中显示,由用户来自定义表格属性:字段的类型,用途和默认值
- 工具能够将表格属性以json形式序列化,以json文件形式进行持久化存储
- 工具能够依据表格属性以及用户自定义的代码模板来生成读表代码
定义
表名:即配置文件的文件名
字段:即配置表中有实际用途的一列
读表代码:并不提供从资源文件中读取配置数据的功能,仅提供从配置数据解析出对应类型字段的功能
工具需求文档
csv只是配置的一种形式,希望能兼容所有表格类型的配置
- ConfigCodeGenLib:以dll的形式提供基础功能,包括
- 指定表格的字段可以有有哪些用途(usage)和类型(type),包括值类型与容器类型
- 指定生成代码模板目录和生成代码目录,生成读表代码时从这些目录读取
- 传入配置文件(csv等)路径,生成表名到字段的属性列表的映射
- 在不提供json文件时,仅所有字段的属性都设置为初始值
- 在提供json文件时,从json文件中读出字段的客制化属性
- 提供表名可以获取字段属性列表,对字段属性进行读写(编辑器支持)
- 可以将表格的配置属性以json形式持久化
- ConfigEditor:依赖ConfigCodeGenLib的图形化工具,提供功能包括
- 提供配置目录(json索引),生成所有表格配置的选取列表
- 选取表格后,显示字段的编辑界面
- 保存字段属性的编辑结果,生成json配置文件
- 生成特定用途(usage)下的生成代码(由 Visual Studio 提供的TextTransform以及T4 Text Template支持)
开发记录
github传送门:https://github.com/kalulas/ConfigCodeGen
libenv.json用于初始化library,appsettings.json用于初始化应用
ConfigCodeGenLib
.Net Standard 2.0 Library
- Configuration:静态类,用于根据json文件配置工具环境
- ConfigManager:单例模式,用于根据配置文件和json文件生成运行时数据
ConfigCodeGenConsole
.Net 6.0 调试Library用的Console
ConfigEditor
.Net 6.0 基于Avalonia的图形化编辑器
配置形式说明
config.json
{
"DataValueType": ["int", "float", "boolean", "string"], // 支持的值类型
"DataCollectionType": ["none", "array", "list"], // 支持的容器类型
"ConfigJsonPath": "ConfigJson\\", // 相对路径,在该目录下存放描述配置的json
"CodeTemplatePath": "CodeTemplate\\", // 相对路径,在该目录下代码生成模板
"ConfigUsageType":{ // 用户的自定义生成类型
"client":{
"CodeTemplateName": "csharp.txt", // 代码模板名
"TargetPath": "Generated-C#\\", // 生成代码目录
"TargetFileType": ".cs" // 生成后缀名
},
"server":{
"CodeTemplateName": "go.txt",
"TargetPath": "Generated-go\\",
"TargetFileType": ".go"
}
}
}
table.json(配置文件对应json)
{
"ConfigName" : "AutoPickupConfig",
"Usage" : [
],
"Attributes" : [
{
"AttributeName" : "Id",
"ValueType" : "",
"CollectionType" : "",
"Usage" : [
]
},
{
"AttributeName" : "Desc",
"ValueType" : "",
"CollectionType" : "",
"Usage" : [
]
},
// ...
]
}