免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1732 | 回复: 1

重构lingling代码 [复制链接]

论坛徽章:
0
发表于 2012-01-12 20:11 |显示全部楼层
重构lingling代码







在添加getRecentGames和getTvChannels接口过程中,发现很多自己都看不过去的代码,试举两例:

1,判断传入的日期是否是合法形式:xxxx-xx-xx xxxx
编码时,用最土的方式,挨个判断字符是否合法。
  1. function isDateValid($date){
  2.     $date = trim($date);
  3.     $arr = explode(' ', $date);
  4.     if(empty($arr)){
  5.         return false;
  6.     }

  7.     $datePart = $arr[0];
  8.     $elements = explode('-', $datePart);
  9.     if(count($elements) != 3){
  10.         return false;
  11.     }
  12.     if(! checkDate($elements[1], $elements[2], $elements[0])){
  13.         return false;
  14.     }
  15.     $timePart = $arr[1];
  16.     $elements = explode(':', $timePart);
  17.     if(count($elements) != 2 && count($elements) != 3){
  18.         return false;
  19.     }
  20.     foreach($elements as $ele){
  21.         if(! is_numeric($ele)){
  22.             return false;
  23.         }
  24.     }
  25.     return true;
  26. }
复制代码
用正则表达式修改后:
  1. public function isDateValid($date){
  2.     $pattern = '/^ *[0-9]{2,4}(-[0-9]{2}){1,2} [0-9]{2}(:[0-9]{2}){1,2} *$/';
  3.     $ret = preg_match($pattern, $date, $matches);
  4.     return $ret == 0 ? false : true;            
  5. }
复制代码
重构过程中,又复习了下正则表达式,平常极少用到{},这次痛快的用了N次。

  

2,类似的业务,调用接口的层数也应类似,比如:

添加足球比赛信息:addFootballTvb() –> finalAddTvb()

添加篮球比赛信息:finalAddTvb()

出现这样的调用层次,是因为后一个功能上层得到的数据,正好符合finalAddTvb()的要求,所以将原来private的接口public出来,看起来好像省事了,但在后来阅读代码过程中,总感觉非常别扭。后来改为:

添加篮球比赛信息:addBasketballTvb() –> finalAddTvb()

代码读起来顺畅多了。重构的目的并不为解决功能问题,而是为了提高代码可读性,进而提高可维护性。

论坛徽章:
0
发表于 2012-01-12 20:12 |显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP