乐于分享
好东西不私藏

AI工具迭代代码实践之加字段

AI工具迭代代码实践之加字段

在已有代码上迭代新功能里,增加字段是一个常见的功能。如果业务比较简单,接口加个字段,然后经过一些逻辑处理,最后存到数据库中,那么手工直接加了就可以了,要给AI工具说清楚,反而更加浪费时间。但如果业务比较复杂,整个链条比较长,那么用AI工具来加字段,可能会更加合适,这些有规律,但又不好写固定逻辑的场景,最适合交给AI工具来完成。如果想象不出业务复杂的场景,那可以考虑一个字段应用广泛的场景,比如原来是不支持应用的,现在需要在所有模块上增加应用ID;比如原来不支持多租户的,现在需要在所有模块上加上租户ID。

最直接的方式是,按文件来说明,每个文件中哪些方法/函数需要加上新字段作为参数或者返回值,哪些数据库表需要加上新字段,哪些对象需要加上新字段等。这种方式的好处是AI处理的结果准确度非常高,因为每个地方基本都指出来了,AI工具能够准确地理解对应的语义,把字段在指定的地方加上,还好贴心地在打印日志的地方也加上新字段。但这种方法的缺点是人工梳理这些地方的工作量还是挺大的,所耗费的时间和文件数量/函数数量是成正比的,文件或函数越多,所需要的时间就越长。AI工具的能力发挥得也不充分,以AI工具的能力应该能够做得更多。

另外一种方式是重点关注入口和出口,它的底层原理是:新加的字段从哪里来(入口),最终要到哪里去(出口)。以一个网页业务来说,一般是以提供给前端的接口为入口(由前端传递过来),最终数据要存到数据库里,数据库相对代码来说作为出口。当然实际情况入口不会这么简单,还会有提供给其它微服务调用的RPC接口、提供给第三方对接的接口、响应中间件事件的监听器、定时调度触发的入口等,这些都算入口,把这些按类别列出来,这个类别是指对字段处理的方式,而不是按接口的分类。比如字段都是从入口传递过来的作为一类,字段从某个公共地方取到的作为一类等,目的就是让AI工具理解到这个字段是如何赋值的。

同样的,出口的种类也是多种多样的,比如把数据存储到数据库、把数据存储到缓存、把数据发布到消息中间件、把数据调外部接口发送出去等,这些场景由于差别过大,可能需要按场景一一说明。比如数据库需要明确表结构如何变化,它对应的实体对象如何变化;比如字段是加到消息中间件的头部里,还是加到正文数据里等。也是为了让AI工具理解数据是要流转到哪里。其实加字段很大程度上就是为了把它存起来,也就是经过某个出口。

有了上面字段的来源和字段的存储,AI工具基本能够推理出应该如何在入口到出口之间哪些地方加上这个字段。但如果中间的链条比较长,希望在某些关键的地方也加上新字段,那就需要把这些关键传递数据的对象也列出来,让AI工具也给它们加上新字段,这样AI工具基本就能够按要求加上新字段了。

这种方式就大大降低了手工处理的时间,让AI工具能够发挥比较大的“智能”去完成工作。