本文源于Google公司的马桶上的健康代码,作者:Marc Eaddy。
大多数的软件开发成本在于维护成本。降低维护成本的 一种方法是仅在真正需要时才实现某些东西,也就是“You Aren’t Gonna Need It(你将不会需要它)” (YAGNI)设计原则。 如何发现不必要的代码?跟随你的“嗅觉”!
代码坏味道通常是表示存在设计缺陷的代码模式。例如:创建仅有一个子类的基类或接口,可能表明你在猜测将来会需要更多的子类。相反,请你 践行增量开发和设计 :在实际需要之前不要添加第二个子类。
** 以下C ++代码具有许多YAGNI坏味道**:
class Mammal { ... virtual Status Sleep(bool hibernate) = 0; }; class Human : public Mammal { ... virtual Status Sleep(bool hibernate) { age += hibernate ? kSevenMonths : kSevenHours; return OK; } };
当真正仅需一个类时,维护人员就必须承担理解,记录和测试两个类的负担。即使所有调用方都传递false ,代码也必须处理休眠状态为真的情况,以及即使从未发生过的Sleep的情况,也必须处理Sleep 返回为错误的情况。这将导致不必要的代码永远不会执行。 消除这些坏味道可简化代码 :
class Human { ... void Sleep() { age += kSevenHours; } };
值得庆幸的是, 通过寻找简单的模式,通常很容易发现YAGNI坏味道和一般的代码坏味道,并且使用简单的重构就可以轻松消除它们 。
你是否在考虑添加今天不会使用的代码?相信我,你将不会需要它!