使用什么标准来确定是否重构代码段?
What criteria is used to determine whether to refactor a code piece or not?
重构代码通常是应用更好的匹配模式、应用编码约定或提高性能的问题。另一方面,重构会花费时间并引入包含新错误的风险。
应该根据什么标准来确定是否重构代码单元?
我的猜测是:
- 测试覆盖率如何?覆盖的代码越多,重构的可能副作用就越小。
- 代码有多重要?越重要,bug的影响越大。
- 重构的收获有多大?这似乎是非常主观的。即使是性能方面的原因,较慢的版本也可能更易于维护或更易于理解。
还有哪些其他方面需要评估?是否有确定这些的公式或系统?我正在寻找科学的或至少是系统的方法。
编辑: 我认为这个问题有点偏离我真正想知道的。而是:一旦您发现了可能的代码异味,您如何确定优先级并传达它?是什么让一个重构比另一个重构更多 important/urgent?
当您应该进行重构时,有许多不同的情况和原因。例如,您的方法正在做很多事情。如果方法做的事情很多,那么测试它就非常困难,所以你需要分解成更小更简单的方法。
通常你应该保持那个 class 只负责一件事,如果不是,那么就是重构的时候了。
此外,如果方法有很多参数,那么可能您的方法有误class或者可以通过其他方式进行优化。
如果你有很多 if-else 条件,那么你可能应该采用一些 state/strategy 模式来消除 if-else。
真正应该开始重构的情况确实有很多,最好是先阅读 Martin Fowler 的 Refactoring 这本书。在这本书中,他涵盖了很多情况,我强烈推荐它。
当业务需求发生变化并且很难将新的软件行为合并到代码库中时,这是重构的主要标准! 在这一刻,它成为高优先级,因为它会解除我们实施所需更改的障碍。
First make it easy to change, than make an easy change ;)
何时重构:
- 很难改——太多地方需要修改;
- 测试中的编曲部分太大了;
- 代码气味存在;
- 实现有很多依赖关系;
- 通用设计模式可以替代自定义解决方案;
- 当源代码无法理解时;
至于何时 不重构 ,我会说可能是在为没有经过验证的产品市场契合度的初创公司编写代码时。您的项目可能很快就会结束,因此在使其工作之前如何使其在技术上具有可扩展性。
重构代码通常是应用更好的匹配模式、应用编码约定或提高性能的问题。另一方面,重构会花费时间并引入包含新错误的风险。
应该根据什么标准来确定是否重构代码单元?
我的猜测是:
- 测试覆盖率如何?覆盖的代码越多,重构的可能副作用就越小。
- 代码有多重要?越重要,bug的影响越大。
- 重构的收获有多大?这似乎是非常主观的。即使是性能方面的原因,较慢的版本也可能更易于维护或更易于理解。
还有哪些其他方面需要评估?是否有确定这些的公式或系统?我正在寻找科学的或至少是系统的方法。
编辑: 我认为这个问题有点偏离我真正想知道的。而是:一旦您发现了可能的代码异味,您如何确定优先级并传达它?是什么让一个重构比另一个重构更多 important/urgent?
当您应该进行重构时,有许多不同的情况和原因。例如,您的方法正在做很多事情。如果方法做的事情很多,那么测试它就非常困难,所以你需要分解成更小更简单的方法。
通常你应该保持那个 class 只负责一件事,如果不是,那么就是重构的时候了。
此外,如果方法有很多参数,那么可能您的方法有误class或者可以通过其他方式进行优化。
如果你有很多 if-else 条件,那么你可能应该采用一些 state/strategy 模式来消除 if-else。
真正应该开始重构的情况确实有很多,最好是先阅读 Martin Fowler 的 Refactoring 这本书。在这本书中,他涵盖了很多情况,我强烈推荐它。
当业务需求发生变化并且很难将新的软件行为合并到代码库中时,这是重构的主要标准! 在这一刻,它成为高优先级,因为它会解除我们实施所需更改的障碍。
First make it easy to change, than make an easy change ;)
何时重构:
- 很难改——太多地方需要修改;
- 测试中的编曲部分太大了;
- 代码气味存在;
- 实现有很多依赖关系;
- 通用设计模式可以替代自定义解决方案;
- 当源代码无法理解时;
至于何时 不重构 ,我会说可能是在为没有经过验证的产品市场契合度的初创公司编写代码时。您的项目可能很快就会结束,因此在使其工作之前如何使其在技术上具有可扩展性。