消除重复和揭示意图会有冲突吗?

2020-05-22  本文已影响0人  袁慎建

Kent Beck提出了简单设计的四条原则:

  1. 通过测试
  2. 消除重复 | 揭示意图
  3. 最少元素

并提到他们的优先级顺序依次降低。什么意思呢,就是说你可以违背其中一条原则,但前提是你是为了满足优先级更高的选择。举个例子,我增加了一个常量,我重构的过程中,增加了一个常量,违背了最后一条,但我是为了消除魔鬼数字,揭示代码意图,所以我是可以这么做的。

优先级容易理解,但问题来了,消除重复和揭示意图他也没有明确说哪个就一定比哪个高。以至于业界存在两派,A说消除重复优先级更高,B说揭示意图优先级更高。本来设计就是一个较抽象的概念,所以受优先级左右的初学者,可能有点不知如何是好。

写代码,最好的方式就是实践法。心里兜着这四条原则后,多有意识留意在你写过的项目代码中,到底那条更加优先。或者去找一些编码经验丰富的朋友聊一聊。

我自己也试过。但我试之前心里是有一个倾向的,因为我个人偏好,我认为重复是万恶之源,所以我心里把它放在更前。但实际上,我在项目代码中很少碰到我因为消除了重复而不揭示意图的,也很少要通过重复来表达意图的,很多时候重复会天然让人感到困惑 -- 为什么要写一样的逻辑呢?所以我也没觉得这两条会有什么冲突,只是因为重复造成的修改成本较高,我觉得应该尽可能消除重复。

后来,测试写多了,发现在测试代码中,我会留一定的重复,不会偏执狂般去消除重复。在测试中,有一种坏味道叫逻辑分割,这个会让我不得不在测试中跳来跳去,所以我做了另一种权衡。

关于这两条,你又是怎么看的呢?

上一篇 下一篇

猜你喜欢

热点阅读