Chinaunix首页 | 论坛 | 博客
  • 博客访问: 174245
  • 博文数量: 43
  • 博客积分: 827
  • 博客等级: 准尉
  • 技术积分: 487
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-26 19:19
文章分类

全部博文(43)

文章存档

2015年(1)

2014年(1)

2013年(5)

2012年(36)

我的朋友

分类: C/C++

2012-12-21 16:38:10

这两天移植了一个工具,原来是某个平台写的,也是用C++写的,然后移到MFC下面,比较蛋疼的事。这里YY一下移植的经验。
最开始的工作是,根据原来的界面先用MFC写出来,这一步基本不会去涉及原来工具的代码。中间本来想根据功能来,写一部分代码,移部分功能代码,但事实证明这是事倍功半,因为添加功能代码会让界面这部分代码变得复杂,让你考虑的东西更多,所以果断决定,先关注界面部分,这也是通常的将当前需要考虑的逻辑尽量规避,简单化,KISS原则。
整个界面OK了,下一步是将原有代码中的公用函数全导进我的工程里面去。嗯,但是这些代码该放到我这边什么地方?原来的代码有的放在.h里面的,而有的是局部在.cpp里面,为了便利一点,就全塞到一个工具类里面,我取名为CImportFuncs,不管是static还是inline什么的,都不会引起编译或者链接出错。所以这样可以一步到位,后面有些小问题,也很好的调整。这样做了过后,CImportFuncs做了一个全局变量,后面所有的访问这些函数都通过ImportFuncs().XXXFunc()。
注意:这一步过程需要边移植,边编译,这是一个迭代过程,直到公用部分移植完成。
最后是UI功能代码了,这个过程就是是一个迭代的过程。先以大功能为单位,大功能下化为UI单元来做。
先把类里面的成员变量移植过来,编译一下,没有错了,然后把原来的UI事件响应代码Copy到对应的响应地方,编译,改错。对于提示的错误,如果是公有部分,这个上面说过了。如果是引用的这个类的其他成员函数,那就将相应的也Copy到这个类里面来。直到可以编译连接成功,对于有的依赖关系很严重的,可以先只解决引用,而不加功能代码,让他编译和连接成功,然后执行验证一下。这个过程实际上是一个重构过程,可以不必过多的考虑原来的代码是怎样的,只要把错的地方等价的替换一下(这个过程里面我基本上是Copy代码,甚至过来的代码很多时候都不用看他到底干了什么,除非有的地方我重构了一下,需要考虑一下代码的拆分)。
注意:这一步的是移植,编译,执行,验证的迭代过程,一次一小点,切不可一次做得太多。在重构里面验证通常是事先做好的测试用例。我这里没有用到这个,直接执行程序,点一点,调一调,看看输出对不对= =。

嗯,就这么多了。

推荐一本关于重构的书籍:
重构:改善既有代码的设计
Refactoring Improving the Design of Existing Code
By Martin Fowler

很好的一本书。
阅读(2082) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~