2012年6月16日星期六

删接口,哥以后惹不起了。


# 删接口,哥以后惹不起了。 
     -- 越是稳定的产品项目,其接口越不予改动。

# 背景

今天遇到一件比较尴尬的工作上事情,虽然有些后悔,但也没有啥不好意思的。所以就想在此描述聊聊,吐吐内心里的小小“憋屈”。
其实,只是涉及一个小小的程序改动,不过故事倒是不短。那开始讲起……

最近工作上都挺忙的,事情多需要经常多线程切换操作,这边事情那边事情的:
负责日常项目管理事务(项目计划安排,组织开会讨论等),负责版本控制安排(版本统一编译,提测,配合打包等),负责项目开发工作,负责配合测试的工作(撰写需求、设计文档,梳理、解释、讨论设计逻辑等),负责解决问题(包括测试发现的问题,关注崩溃系统问题,用户反馈诡异问题等)。
(故事背景,当是讲故事前奏预热吧☺)

# 故事

前一阵子,某项目涉及一个接口的修改,而该接口为异步返回结果,描述如下:
原来,调用者不需要关心其返回结果。一个简单接口可以满足,
int set_xxx_func ( ... );

现在,新的需求决定调用者要关心其返回结果,调用之后调用者需要以轮循的方式查询结果。此时需要两个接口得以满足:
int submit_set_xxx_func ( ... );
int query_set_xxx_func ( ... );

PS. 至于这里为啥是轮循方式查询?在这里不是重点不需关心☺,具体的系统设计决定了这样的形式吧,不过当然是callback机制的效率高于一筹了!不再多说了,否则离题了。

说到这里还没有说到重点呢,改接口。后来因这样的新需求决定如上描述修改了该接口。记得在过(讨论)详细设计方案时候,开发测试四人(包括YJ,JL,SY还有我)都提到了是否保留原来接口set_xxx_func的问题,讨论中确认了已经没有其他产品,其他模块在使用该接口了,而且差不多已一年的时间没有使用到了吧,最后大家均同意了去掉该接口吧,直接上新的接口吧。因为该接口的模块一直都是跟着另一接口层模块DK一起发布的(该点是问题的所在),只要保证到时DK模块一块更新新的接口就万事大吉了。

好吧,那就果断去掉吧,我当然乐意了。作为开发人员,我已经难受很久那些“无用久已”的接口了,看着就觉得接口资源浪费在那儿,一个dll导出了四百多接口不少了吧,而且也碍着程序猿们查看代码啊。注意,这里带着当初一时比较重的个人感情色彩。汗。。

修改过程,与DK模块一并更新了新的接口设计,后面也完成了开发与测试,提测顺利完毕了。没出啥接口方面的问题,就不再关心了,以为没事就放心了。

差不多过了三周的时间吧。突然在今天下午,兄弟部门某同事突然报了一个问题到了欧爷(My TL)那边,转给了我。查了原因,他竟然使用了旧版的DK模块,Check不到老接口set_xxx_func了,囧,然后程序刻意做就地崩溃下来了。

这时,欧爷大怒了(可能夸张了点,其实情况还好吧)。痛批,“ Too simple,too stupid!,你们怎能去掉老接口呢,甚低级错误也“。

虽然某同事使用接口不当,但崩溃这种不良情况确实发生了,我有点愣住了,必须无条件承认自己过错了。奇怪,当初我们四人咋都同意了如此做法了呢。即使留着旧接口吧,也不崩溃。回想揣摩一下,”该接口的模块一直都是跟着另一接口层模块DK一起发布的“ 其实,这只是一条”一直以来都这样“的常识判断,而不是某确定的发布方案。

# 结果

情况还好,产品版本未发布,还在测试改错阶段。尽快恢复老接口,修补该问题即可。
越是稳定的产品项目,其接口越不予改动。

……
好吧,故事就讲到此吧。
所以,删接口,哥以后惹不起了。谨记!

晚安好梦。

(完)

20120615 / Junkun Huang.


没有评论:

发表评论