重构是敏捷开发人员工具箱中的一项核心实践。按照重构的定义——修改内部结构(设计)而不影响外部行为——来讲,它并不能为客户创造可衡量的价值。在精益世界中,任何不能为客户创造价值的做法都是浪费,客户所能够感知到的只是行为/ 功能,而非结构。
但是精益定义了两种类型的浪费:“纯粹的浪费”和“必要的浪费”。“纯粹的浪费”指的是那种既不能给开发团队也不能给客户带来好处的做法。“必要的浪费”是指某些行为,即便它不能给客户创造价值,但也是在我们所知的范围内完成一项工作的最佳方式。重构就是典型的后者之一。
那又为什么要把一个有价值的做法称作“必要的浪费”呢?呃,这里的着眼点在于,它对于客户而言是没有价值的。所以我们应该把在这方面投入的 精力尽量减到最少,而且需要不断寻找更好的替代方案。可如果我们没有把它识别为一种浪费的话,我们就会把它理解为正确完成工作的唯一方式,不再寻找解决途 径——想一下“预先做大量的设计(Big Design Up Front)”吧。
如果看完了上面的话以后,你仍然赞同我的观点,那么接 下来就有一个问题等着你了:“那又怎么样?理解也好,不理解也罢,会有多大影响吗?”当开发人员把重构看作是必要的浪费时,他可能就会尽量减少重构,只重 构那些不再符合客户需求的代码。也即,如果你在编码的过程中发现了类中的某个方法有“坏味道”,但是它和你正在实现的需求并无联系,那就把它放到一边去。查看英文原文: Opinion: Refactoring is a Necessary Waste
评论