码迷,mamicode.com
首页 > 其他好文 > 详细

代码重构实例之数据聚集

时间:2014-12-04 00:41:24      阅读:306      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   os   sp   java   for   

敏捷开发强调,要经常重构代码。在开发过程中,往往是开发和重构交替进行。短暂的重构,可以使得后续的开发维护更加容易。我觉得,代码重构可以分为逻辑重构和数据结构重构。数据结构的重构往往需要对代码进行多处改动;但是,数据结构的重构也可以为后续的开发维护带来更大的便利。这里就是一个数据结构重构的例子。

这是以前的一次代码重构经历,今天想起了,就记下来,帮助自己记忆。当然,既然是重构,总得承认自己写的第一版丑陋的代码。

为了方便描述,采用javascript来进行说明。

故事是这样的。刚开始,任务是画一些方框,并且用线将其连接起来,而且方框的大小都一样。本着代码应该越简单越好的原则,这里就只需要用一个数组记录每个方框的位置就可以了。然后遍历数组,画出方框就可以。

1 var positions = [];
2 positions.forEach(function(p) {
3   drawRect(p); 
4 });

可是,接下来任务变了,需要在每个方框中间显示一个名字。好,那我们不改动原来代码的基础上,再加一个数组来记录每个方框的名字就可以,只是画方框的函数需要添加一个新的参数,方框的名字。似乎还可以。

1 var positions = [];
2 var names = [];
3 for (var i = 0; i < positions.length; i++) {
4   drawRect(positions[i], names[i]);
5 }

等等,如果这里positionsnames长度不一样怎么办?所以得加上判断

 1 var positions = [];
 2 var names = [];
 3 
 4 if (positions.length != names.length) {
 5   return;
 6 }
 7 
 8 for (var i = 0; i < positions.length; i++) {
 9   drawRect(positions[i], names[i]);
10 }

接下来,任务又变了。方框有几种不同的类型,不同的类型要有不同的画法。还是如法炮制?可是,假如还有处理方框的其他函数,岂不是每个函数都要改?而且,随着代码越来越复杂,这种改动也会越来越多,改动也就越来越难。

那怎么办呢?其实这些数据之间是相互关联的。方框的名字,位置,类型,其实都是方框的一个属性。既然如此,我们就定义一个方框类,包括所有的这些属性就可以了。

1 var rects = [
2   {“name”: “”, “position”: []}
3 ];
4 
5 rects.forEach(function(r) {
6   drawRect(r);
7 });

接下来,任务又发生了各种变化,比如,我们需要给每个方框画个图片,所以需要记录图片地址;我们需要删除方框,所以需要记录方框的句柄。这时候就容易了,修改方框这个类的定义就好了。而所有对方框进行处理的函数的参数都不需要进行修改。

最后,这样把相关的数据聚集起来,另外一个好处是使得程序更容易理解,因此开发中出错的概率更低,修改也更容易。

代码重构实例之数据聚集

标签:style   blog   io   ar   color   os   sp   java   for   

原文地址:http://www.cnblogs.com/l00l/p/4141540.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!