加餐 | 你真的了解重构吗?
加餐 | 你真的了解重构吗?
讲述:郑晔
时长10:19大小9.45M
每个程序员都要做的事
重构是一种微操作
重构地图
总结时刻
赞 24
提建议
精选留言(39)
- 非鱼2019-03-15函数式编程有什么推荐书籍吗?
作者回复: 有几本可以了解一下,《计算机程序的解释与构造》(Structure and Interpretation of Computer Programs,SICP),还有《Haskell 趣学指南》(Learn You a Haskell for Great Good!),《函数式编程思维》(Functional Thinking)。
34 - 旭东(Frank)2019-04-03重构是“改革”,重写是“改朝”
作者回复: 这个比喻…有点道理
22 - 行与修2019-03-17重构不仅是愿景(名词),也不仅是行为(动词),还应该成为程序员必备的习惯和工作方式。但要成为习惯,甚至是深入骨髓的那种,是需要有积极意识和大量联系的。 有程序员会说,先把功能实现了,后面我再去重构,但后来的情况往往是不重构,或是债务过多重构代价太大,原因也大多是之前课程中提到的诸如任务分解不到位,微操作缺失,缺乏合理有效的单元测试等等,所以程序员的自我修养也是要体系化的,所谓功到自然成。与诸君共勉之!展开
作者回复: 观察和解释都很到位。
12 - 丁丁历险记2019-11-17讲个段子,身为公司首架(自己封的) 我和其他开发人员的最根基差别就在于重构。
作者回复: 心疼你
10 - zapup2019-03-24维护别人的“旧代码”,可以从重构开始。
作者回复: 重构,从理解重构开始。
8 - 丁丁历险记2019-11-17分享里面一句对我影响很大的话, 将意图与实现分离。
作者回复: 共勉
6 - 码农Kevin亮2019-08-29一直以为重构是要重新调整结构。学习了任务分解的概念才知道原来我一直在重写
作者回复: 恭喜你认清了一个概念
6 - 下个目标45k2020-11-17重构是手段,单元测试是后盾,消除代码坏味道则是目的
作者回复: 目的是代码更具可维护性,能够长期发展。
共 2 条评论5 - 小钟2019-06-29买了十来个专栏从来没有写过留言,读到这里很认同之前看过的几个留言,郑老师的这个专栏是看过对我帮助最大的一个,可以用高级来形容,将软件工程,agile,,精益创业的一些概念结合的很好,谢谢老师。
作者回复: 你有收获,我很欣慰。
5 - 张亚运2020-01-08添加一个新功能,先重构,再加新的业务功能。
作者回复: 点对了
3 - hua1682019-03-16我用idea建立了一个spring写了一个简单的MVC,按您的方法搞了半天终于搞定了。 但有一个问题,代码如下 package com.hualinux; import org.springframework.stereotype.Repository; @Repository public class T1Dao { public void printName(String name){ System.out.println("Dao层的name"); } } 我光标放在方法行,按F6,会弹出如下提示: All candidate variables have types that are not in project.Would you like to make method 'printName' static and then move 非要静态化才行,要不不给操作~~展开
作者回复: 你没有在这个类里面添加新类的实例。 public class T1Dao { private NewCommon target; ... public void printName(String name) { System.out.println("Dao层的name"); } }
3 - hua1682019-03-15老师,我有点疑惑: 文中 重构的手法就会把它做一个分解: ●添加一个新的通用类,用以放置这个方法; ●在业务类中,添加一个字段,其类型是新添加的通用类; ●搬移实例方法,将这个方法移动到新的类里面。 最后服务类中有一个通用的方法是不是要在服务类中删除或注解掉? 如果删除或注解那不是一样引起大批量操作?那跟重写不是差不多了? 如果没删除那不是有2处可以引用相同的方法?不是产生冗余了吗?展开
作者回复: 最后一步叫“搬移”,就是把服务类的方法删除,在通用类里增加。用 IDE 的“重构”动作完成,它会替你搞定所有问题。
3 - 西西弗与卡夫卡2019-03-15不少人把重构望文生义或者扩大到成重新构造、重新构建甚至推倒重来了吧
作者回复: 是的,典型的标题党式理解问题。:)
3 - Victor2020-05-09重构应该是一个可持续发展的过程,阶段性的就要复盘改善代码,还有每次添加新功能的时候都是重构的合适时机;否则长期不做发展下去就会很难重构,因为害怕破坏原有的逻辑,重构的风险也会增加。
作者回复: 你说得非常对,添加新功能都是重构的时机。今天不重构,明天就重构不动了。
2 - javaadu2020-02-20在《设计模式之美》的专栏里,王争老师将重构阐述为微观操作和宏观操作,分别对应着《重构》和《重构模式》2本书。不过我本身更倾向于郑老师的说法,重构主要还是微观操作,大的重构基本都是以重写为结局。
作者回复: 我和老马可是前同事,认真理解过重构的 :)
2 - 我行我素2019-03-16在之前的理解中一直认为重构就是将看着别扭或者影响性能和可能出现问题的代码进行调优,
作者回复: 如果你看到了差异,我的目的就达到了。
2 - aoe2021-11-24原来重构也是微操,又见到了中间层发挥的作用:添加一个新的通用类1
- Laughing2020-09-08如果以“以终为始”的视角来看,重构的最终目的就是拥有一个可读性高,可维护性好的工程。然后重构这个动作就是将达到这个目标的过程进行分解,这是我理解意义上的重构,代码只是我们要操作的最小元素。很多事也一样,例如团队工作流的管理等等,在某种意义上也可以进行“重构”。
作者回复: 步子太大,容易扯着,慢慢来。
1 - helloworld2019-05-02知道什么是代码坏味道,分步骤消灭坏味道1
- 旭东(Frank)2019-03-26重构到重写也是个量变到质变的过程。个人理解。但重写不一定是从重构做到的
作者回复: 重写和重构是两个套路,重写基本上需要重新设计,重构一方面可以在日常工作中应用,一方面可以用以发现代码中的结构。
1