go项目表数据操作代码生成装置

背景

1.现有的go语言项目的开发模式和开发规范,对一张表进行增删改查操作时,需要在不同层封装不同的结构,同时在层与层交互的时候,需要编写相关的setter方法来转换不同层之间的结构。

2.现在的logic层和db层融合在一起,在对新表操作的时候,需要从0开始编写相关sql语句。

所以基于以上两点,在做项目迁移和有新表创建的需求中,不可避免的要编写这部分代码。

对已有逻辑的统计,平均对一张表做增删改查操作,大概会新创建10个文件,编写上述两部分代码大约600~900左右的代码(视表结构大小而定)。

假如一个比较复杂的需求里面有十张表。。。那上述两部分的代码开发量可想而知。

image.png

解决思路

如果对几个目前已经存在的需求,再结合目前Seller Platform的GO项目规范,就可以发现,一个请求从Router层开始到DB Model层,经过的路径是这样的:

Router → View (含有Req,Resp结构和对应的setter 方法,view层函数)→ Logic(含有逻辑层结构体、gorm 数据库操作语句函数、 setter方法。) → DB Model (db 结构体)

1.通过分析可以发现,理想情况下,可以通过数据库的表结构及对应的column信息,生成上述各层中的结构体。

2.同时预置对该表的增删改查操作,虽然实际的业务肯定不会这么简单,但是这些基本的操作和结构体都是必不可少的。

3.对特殊逻辑进行一定的定制化处理转换,如添加时不需要传入id,添加和修改时自动生成ctime,mtime,operator根据端参数从用户信息获取、删除和查询操作会判断status!=3且必须存在等。

实际实现方案

1.输入需要自动生成的数据库名+表名,以及项目结构的业务代码上级路径。

2.根据show columns from xxx 获取表中的列信息。

3.根据上述信息(如字段的名称、类型,长度、是否为空)生成对应go结构体。

4.预置最基本的增删改查操作。做到能在生成的代码的基础上进行二次开发,省去生成的代码部分的工作量。

Miscellaneous中的实践

对feedback表自动生成相关代码

共计修改2个文件,创建10个文件,代码613行

image.png

项目地址

--

未来优化点

1.可以根据project_dir直接生成对应的文件到项目中各个层的文件夹下,省去创建文件复制代码的操作。(已完成)

2.可以同时生成对应的单元测试代码,方便自测。

3.现在的req参数中的参数校验,只加了是否必须的校验和大于0(对于string则是长度大于0)的校验,未来可以根据数据的varchar 解析和具体go 数据类型进行精准校验。

4.目前使用该项目生成的数据表,假定表中含有_status,ctime,mtime字段。如果表中没有含有相关字段。还需要进行少量的删除修改才能编译通过。未来考虑对这三个字段进行判断及兼容。

...

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容