大头
标签云
3G
AWS
Android
BeautifulSoup
Boto
CC
DONT_MAKE_ME_THINK
DTV
DVB-T
Haskell
ISDBT
JUnit
LUdecomposition
Linux内核
MIPS
MiniBlog
Perl
PyInstaller
S3
SI
STM
Subtitle
UED
VideoDemystified
VideoResolution
audio
c/c++
cassandra
colorspace
colorspace VideoDemystified
compile
debug
dvb
eLocutor
format
fortran
gui
h.264
icon
interlaced
java
joke
kernel
linux
matlab
mono
ota
php
project
pyExcelerator
python
resource
ruby
spec
stb_design
stereo
svn
twitter
unicode
warning
书债
书托
交互设计
会议管理
信号量
出差
出版
勘误
反思
哲学
团购
团队
图书
图灵新知
培训
妈妈
娱乐
并发
弗洛伊德
微博
抑郁症
投诉
捉虫日记
改变心理学的40项研究
敏捷
敏捷开发的艺术
数学
数据库
新闻
森田心理疗法实践
森田正马
津巴多普通心理学
测试
烂书
用户体验
界面
瞬间之美
神经症
神经质症
科普
管理
精神病
精神病学
编译
编辑
翻译
药物治疗
设计
证实偏差
质量
逻辑
配置管理
重构
高良武久
分类
日历
十一月 | ||||||
---|---|---|---|---|---|---|
日 | 一 | 二 | 三 | 四 | 五 | 六 |
27 | 28 | 29 | 30 | 31 | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
评论
留言
微博
热门文章
随机文章
豆瓣上谁关注这里
链接
搜索栏
RSS
功能
页面
计数器
481611
访客统计
存档
重构 - 嵌入环境GUI模块统一接口的一个实践
工程:
嵌入式环境,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)也是一个很重要的目标。
在这次实践中,统一了调用接口,去掉重复的代码,这是值得去做的,因为这个行为也没有增加代码体积。