7815

帖子

57

TA的资源

裸片初长成(中级)

21
 

重构,真的不是万灵丹

    由上可见,我们至少可以得出一些简单结论:
    1.重构,即使成功,它也不会带来什么直接效益,它只对开发者有用,而对项目的其它环节则没有;
    2.重构带来的这些好处,说实在的,很多也只是出于开发者主观的看法:好懂、清晰都不是客观存在,难以界定和衡量,所以很多时候,很难证明这到底是真的对开发有帮助,还是只是开发者的个人臆想。
   (关于MF等人总结出来的 一些“代码坏味道”以及相应的解决方法,后续将有专门论述,论述其中一些处理手法其实没有本质帮助——比如对含有大量局部变量和全局变量采用 方法提升为类 时,把局部变量提升为类的变量的办法,来减少提取后的新方法之间传递的参数减少,但实际上,这些变量仍然混杂在类内部,和一个小模块或者长函数中的全局变量没有太大区别,个人认为,这种转变,意义不大。)
    3.要进行重构并不容易,比如准备完善的测试(尤其需要自动化测试)就是一道很大的关卡,此外,它需要重新投入相应的人力、时间、测试资源,也会对这些方面新添压力。
    4.在真正了解项目代码,尤其是涉及的业务之前,进行重构是非常危险的,可能会摧毁已有的成果,这在职场和商业上是难以容忍的。
    然而,很多时候,重构本身就有助于阅读和理解代码(或者说这是重构的一个目的,Martin Follwer 和 Michael Feather均表现出这种倾向)。
    可以说这是一个典型的 鸡生蛋蛋生鸡的困境,这种困境唯一的解决方案就是,以其中一个为准绳,基准,而这一次,我们很可能必须接受 先理解再重构,因为,不理解就重构,风险更大,后果难以承担。
与此类似的,还有添加测试的困境。在Michael Feather的经典著作《修改代码的艺术》一书中提到,遗留代码可以定义为缺乏测试的代码,而为了给这些遗留代码添加测试,很多时候需要首先做重构,来解开难以测试的部分。
     又是一个鸡生蛋蛋生鸡的困境。
     好吧,不得不承认,这才是真正的软件世界。
此帖出自编程基础论坛
个人签名

强者为尊,弱者,死无葬身之地

 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

22
 
最后一部分,这次更新的内容有点多,因为实在不好再分了,最后一部分,其实只是引起一个话题。
是关于测试的,本身没有太多的内容。

此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

23
 

重构未动,测试先行

    在上述的分析,以及我自己对已有经历(惨痛教训)的反思后,我终于意识到,重构不仅不是万灵丹,还是一件相当危险的开发工具。
    所以,下一次,再有这种想法,我会努力按捺自己内心强烈的重构的欲望,但我仍然认为,重构是一柄解决很多遗留代码的神兵利器,不能因为它危险,它曾经给我带来过伤害,我就避之不及。凡事都有两面,重构也一样。何况,重构如刀剑,用的好坏全在于人。
    在上述的调查中,我们也得到了比较完整的关于 重构应该怎么做,和怎样可以避免重构的危险的一些很具体的措施。
    在这其中,特别引起我注意,和需要强调的就是,测试。
    是的,测试。
    只有测试,才可以真正确保我们到底做了什么,破坏了什么,成就了什么。
    就算不重构,测试依然神兵利器

    事实上,除了重构这种开发思想,在极限编程,在敏捷开发里,或者干脆就是TDD(测试驱动开发)里,测试都被强调,并且处在一个非常重要的中枢位置。
    这,是完全可以理解的。
    如前所说,只有测试,才可以真正保证我们对代码做了什么,发生了什么改变。已有的是否被破坏,出现的问题是否被解决,要新添的功能是否已经完成。
    当然,测试并不容易。和重构一样,但这里已经就重构展开地够多了,因此,关于测试的内容,有机会,我们将在后续中提及。
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

24
 
关于这次反思重构的所有内容,到此结束。
END
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

25
 
深度好文!
此帖出自编程基础论坛
 
个人签名现象越奇怪,错误越低级
 
 

回复

67

帖子

3

TA的资源

一粒金砂(中级)

26
 
兄弟,总结、反思、复盘,是最好的提升自己思想广度、深度、角度的方式,这点你做的很棒,我也得多像你学习。

虽然一时间很难改变其他人对于 “重构” 的认识,但是自己通过反思,加深了对于软件设计、开发的认识,为以后提供了更好的思路,对自己来说,这也是很大的收获。

“重构”对于不同角色的人、不同层次的人、不同水平的人、不同处境的人认识和使用不一样是正常的。没有绝对的好与坏。我一直以来坚持的理念是“改变是成长的唯一手段”,重构又何尝不是一种更为巨大的改变,所以我也一直鼓励新人去“改变”、去“创新”、去“重构”。

只不过具体执行的过程中,决定权掌握在管理者手里,管理者往往需要考虑的因素太多,判断的结果往往倾向于风险最低的方向,只有这样企业才好更容易的生存下来。等企业发展到一定层面,才有更多的精力和能力去为未来铺路,这时“重构”与“重写”也会大范围的出现。这也是我认为的,那些 BAT 企业在 GitHub 有那么多开源软件一个原因。
此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
Microchip 直播|利用motorBench开发套件高效开发电机磁场定向控制方案 报名中!
直播主题:利用motorBench开发套件高效开发电机磁场定向控制方案
直播时间:2025年3月25日(星期二)上午10:30-11:30
快来报名!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表