大头
Table_bottom

标签云
Table_bottom

分类
Table_bottom

日历
八月
31123456
78910111213
14151617181920
21222324252627
28293031123
Table_bottom

评论
Table_bottom

留言
Table_bottom

微博
Table_bottom

热门文章
Table_bottom

随机文章
Table_bottom

豆瓣上谁关注这里
Table_bottom

链接
Table_bottom

搜索栏
Table_bottom

RSS
RSS Link
Table_bottom

功能
Table_bottom

页面
Table_bottom

计数器
447879
Table_bottom

访客统计
Table_bottom

存档
Table_bottom

重构 - 嵌入环境GUI模块统一接口的一个实践

loveisbug posted @ 2009年8月05日 16:59 in 工作 with tags 重构 , 1865 阅读

工程:
嵌入式环境,GUI模块。

问题:
某全局控件组,包括两个progress bar,两个显示百分比的text,工程中5处使用。3处位置大小及颜色一样,1处需要一个mini版,位置变换,长度变小,另1处也做了大小和位置的微调。需要增加1处使用,不要text,只显示progress bar,大小位置都要调整,颜色也要改变,而且两个bar的前景色不一样。

现状:
有3个接口,3处调用 xxx_open() ,微调处调用 xxx_open_yy() ,mini版处调用 xxx_mini_open() ,关闭时调用 xxx_mini_restore() 恢复控件的属性。

想法:
统一open接口,原只有一个参数,传递调用窗口作为控件组的父窗口,现在要增加4个参数:1)位置大小,2)text的颜色,3)bar的前景色,4)bar的背景色。

问题:
新需求里两个bar的前景色不一样。可以依赖枚举定义中的前后关系,否则就要再多传递一个参数。

实践:
去掉了 xxx_open_yy() 、 xxx_mini_open() 、 xxx_mini_restroe() 接口, xxx_open() 接口里增加代码设置控件的属性,不再能使用定义控件时的设置。
对于是否需要显示text,通过传递进来的text颜色来判断。
调用处增加代码组织好位置大小颜色信息。

效果:
虽然去掉了多余的接口,但是增加的代码使得最终编译生成的二进制文件没有变小。
在嵌入式工程中,我总是把减小代码体积当作重构的首要目标。当然,去掉重复的代码(Duplicated Code)也是一个很重要的目标。
在这次实践中,统一了调用接口,去掉重复的代码,这是值得去做的,因为这个行为也没有增加代码体积。

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter