背景
最近,在工作中每天写需要写很多业务代码,感觉套路都一样,基本都是“add”、“edit”、“del”、“query”、“list”的逻辑,非常的繁复,就像鸡肋,食之无味,但又不可弃之,代码总是需要码农们一块块砌到墙上,具体写代码中,不仅费时而且有时会由于个人状态原因少写个这那的导致返工调试。受够了这种折磨,我决定能否进一步抽象业务代码,只写每种业务代码必须写的部分,把共性的东西交给机器来写,聚焦代码中真正的价值点。一个概念在我大脑中冒出-------“代码模板”。我要干的事情就像protobuf那样,写好数据结构,然后用工具生成代码,也像 gsoap 、thrift,又或是前端框架的脚手架工具那样。只不过,我想能做一个通用的“代码模板”工具,来适用于业务代码的开发中。
实践方案
基本思路是:用mako定义代码模板,用json定义模板的参数数据,一键执行用参数数据渲染模板生成代码,另外,支持一键将生成的代码安装到项目工程目录,也可一键从项目工程中卸载。
实现说明
工具代码目录
result – 存放结果
template – 存放定义的代码模板
conf.json – 参数配置数据
generate-code.py – 执行生成代码在result目录
install.py – 执行将生成代码拷贝到项目工程的地址
uninstall.py – 执行将从项目工程中删除生成的代码
json文件配置的范式
{
"global":{//全局的参数区(必选), 公共的参数可以防止这个区域
"全局参数1":"test",
"全局参数2":"Paper",
...
},
"模块1":{//一个代码模块参数区(可选),对应template下的一个代码模板目录
"dst_path":"安装的目标路径",
"参数1": "test",
"参数2": [],
"参数3": {},
....
},
"模块2":{//一个代码模块参数区(可选),对应template下的一个代码模板目录
"dst_path":"安装的目标路径",
"参数1": "test",
"参数2": [],
"参数3": {},
....
}
...
}
- global参数区
这个里面定义的参数,可以在所有代码模块的模板内使用,用法为${g[”参数名“]} - 代码模块参数区
这里面定义的参数,只能在该模块代码的模板内使用,用法${params[“参数名”]},一个代码模块对应template目录下的一个代码模块目录 - 参数
参数可以理解为一个变量,可以在代码模板内使用,称之为锚,在模板渲染生成代码时实际就是将这些锚替换为json文件中定义的值,参数的类型完全按照json格式,可以是字符串,整数、object、列表等等。 - dst_path参数
每个代码模块参数区都有一个dst_path参数,是该模块的代码可以拷贝到项目的具体目录,是安装生成代码时需要的。 - 文件名渲染
在文件名渲染时,由于文件名不能含有双引号,所以就不能用 $ {g[ “参数名" ],我们特殊处理,用${g[参数名]实现。
使用方式
- 在template目录内定义代码模板,需要学习mako模板引擎的语法
- 在conf.json内写参数定义
- 运行generate-code.py执行代码的生成,生成代码在result目录
- 运行install.py执行代码安装到项目中
- 运行uninstall.py执行代码从项目中卸载
总结
通过个人在使用中的感受,发现该工具能够很好的提高开发效率。针对业务代码,首先要先抽象出模板,一般相似的业务只有 数据库表的数据格式不一样,写起来代码都是一个套路,所以用代码模板工具可以提高开发效率。该工具具有很好的通用性,请发挥想象力,就能在其他开发的工作中起到增效的效果。
这里只是简单介绍,也许大家并没有看懂怎么用,需要的请移步我的码云仓库,下载代码,运行下例子,能更好的理解。
码云项目地址:https://gitee.com/z1717/CodeRobot
注:转载请附上原链接和作者