作者:梁伟盛
事件背景
有一天leader给程序员cover分配了一个需求,cover一看,需求很简单嘛,就是在页面异步拉取数据展示就OK了,于是就和cgi同事阿翔对接了一下接口,就啪啪啪(敲键盘)的开始码代码了,不到2天就完成了需求。
//各种高逼格代码
...
$.ajax({
url: '/cgi-bin/getList',
...
success: function (result) {
//判断是否正确返回
...
showList(result.data.list);
}
});
function showList (list) {
for (var i = 0, j = list.length; i < j; i++) {
//使用到list中的room_id, room_name, 各种xxx_xxx;
}
}
function check () {
//使用到list中各种xxx_xxx属性
}
//各种function
...
完成效果图:
一切都是那么的完美,就等提测了!!哈哈哈,我实在太聪明了(cover自白)
阿翔之坑1
正当cover信心满满没问题的时候,阿翔突然和他说,room_id这个命名错了,要改成room_no才行,"我去。。。我好多地方用到了room_id。"
此时一般很多人都立刻去把room_id属性全部改为room_no,但是cover并没有这么做,他心想没准后面其他属性又会改,我不会再被坑一次,于是cover加了一个函数。
function format (data) {
var _data = [];
for (var i = 0, j = data.length; i < j; i++) {
var d = data[i];
//团队规范需要命名驼峰式
_data.push({
roomNo: d.room_no,
roomName: d.room_name,
roomTime: d.room_time,
//各种xxx_xxx
})
}
return _data;
}
...
showList(format(result.data.list));
...
这样就算阿翔把属性名改一万遍,在此函数只需要改一次就可以了,不用每个地方都修改,完美!此后cover在数日子等待提测。。。
阿翔之坑2
提测之日快到了,阿翔又通知cover,"创建时间那个字段leader说数据库中不能直接存放2015.11.11这种日期格式,全部要改成秒,你在前端把数据格式化成正常日期吧"。此时cover心里一万个草泥马在奔腾,"我的翔啊。。。你怎么又坑我了!"
cover立刻改造了代码
function formatTime (time) {
//格式化时间
}
function format (data) {
var _data = [];
for (var i = 0, j = data.length; i < j; i++) {
var d = data[i];
//团队规范需要命名驼峰式
_data.push({
roomNo: d.room_no,
roomName: d.room_name,
roomTime: formatTime(d.room_time),
//各种xxx_xxx
})
}
return _data;
}
.
showList(format(result.data.list));
...
提测顺利通过,项目终于如期发布了,cover也松了一口气了!
事后一根烟时间
经过这次被阿翔坑过2次的cover,事后他回想了很多,"如果以后属性名不确定,数据需要各种格式化,或者其他接口的属性也用到一样的格式化方式,或者说其他接口返回的数据也是一样的,这样能否抽离出一个数据化格式工具呢?不能再被我的翔坑了!"
于是cover苦思冥想,抽离出了一个格式化工具函数并放上了公司的lego平台imweb-format (暂时只能内网访问,请等待同步到公网)。
楼主总结
没有一个程序员一开始就能写出高抽象,复用性高的代码,和一世人流流长,总会爱上几个人渣一样,程序员总会遇到各式各样的坑,关键是遇到坑之后是视若无睹还是努力学习改进,同一个坑如果遇到两次还不改进,你是傻啊!
另:本故事人物均为虚构,若有雷同,纯熟巧合。。。。
原文链接:http://ivweb.io/topic/56612b9f4c460c2f5385b96d