编程经典书籍推荐:重构 改善既有代码的设计

《重构改善既有代码的设计》,英文书名Refactoring: Improving the Design of Existing Code,与《设计模式》齐名,出版于1999年。作者Martin Flowler,世界著名的面向对象技术专家,敏捷开发创始人之一。该书从出版至今,赢得了无数人的赞誉,在世界范围内畅销不衰。中文版译者是熊节,译文准确、文笔流畅,值得购买。

重构这个词听来有些高深,其实再普通不过,每个程序员在工作中都会不知不觉干着重构的活,只是不知道这叫重构。就像阿猫阿狗不知道“氧气”这个词,但并不妨碍它们每天都在呼吸它。

 我比较喜欢这本书的第2章《重构的原则》,心中的很多想法都在这一章得到印证,感觉找到了知音,更有价值的是解决了我的一些疑惑。公司做的网管软件属于产品,但以项目的方式驱动,通过每个项目的完成来实现公司在网管领域的战略目标,可以把这种产品叫“项目型产品”。作为长期存在的产品,必须要对代码进行持续不断重构;但项目具有临时性、一次性的特点,重构的需求又不迫切。项目型产品兼具两者的特点,每个项目都要对软件进行二次开发,又要对原有版本进行兼容,这个时候重构成了被迫要做的事情。每天都在修改软件、每天都有新版本诞生,因为重构导入一些新的Bug,而测试是又是薄弱环节,经常会出现一些消失的Bug再次出现的现象。由于软件的自身特殊性,使用测试代码去验证重构的正确性成了难题,不过我觉得还是可以有办法做一些改善,慢慢探索吧。

 每一部影视剧都有分主角和配角,在电视剧《大长今》里面,我觉得皇帝一大家子人整天都在吃,一切围绕吃来展开,但观众都知道,生活远不是这样。写书也是这样,在这本书里,重构就是主角,当重构成为主角的时候,其他东西必然成为配角,作为配角就算死一百遍也不令人惋惜。比如算重构与性能的关系问题,比如第一章中计算租金和积分的例子,好比汽车运输蔬菜,有萝卜和白菜两种蔬菜,正常情况下,我们把萝卜白菜一起堆上车,一次就拉完(一个循环中计算租金和积分);如果用重构的方法,就要分两次拉,第一次拉萝卜,然后是白菜(为租金和积分的计算分别开启循环)。

 对于Replace Temp with Query方法的使用,当一个临时变量被使用100次的时候,为什么要用Replace Temp with Query呢?当然我可以通过修改Query的代码来避免性能的受损,但我不提倡这种做法,不提倡为重构而重构。不这么做绝不是因为性能问题,是为了保持代码的可读性,在这种情况下用临时变量会使代码可读性更高,更不会导致“这个Query每次返回的值不相同”这样的误解。话说回来,换成我来写书,也会这样写的,因为书只能这样写,但作为读者一定要结合实际,灵活运用,我想这也是作者的本意。

你可能感兴趣的:(编程经典书籍推荐:重构 改善既有代码的设计)