Don't Repeat Yourself !!!,意思是说:任何一个知识点在系统内都应当有一个唯一、明确、权威的表述。这个原则也叫“真理的单点性(Single Point of Truth)”或者SPOT原则。
重复会导致前后矛盾、产生隐患问题的代码,原因是当你修改重复点时,往往只改变了一部分而并非全部。通常,这也意味着你对代码的组织没有想清楚。
常量、表和元数据之应该声明和初始化一次,并导入其他地方。无论何时,重复代码都是危险信号。复杂度是要花代价的,不要为此重复付出。
通常,可以通过重构去除重复代码;也就是说,更改代码的组织而不更改核心算法。有时重复数据好像无法避免,但碰到这种情况时,下面问题值得你考虑:
1.如果代码中含有重复数据是因为在两个不同的地方必须使用两个不同的表现形式,能否写个函数、工具或代码生成程序,让其中一个由另一个生成,或两者都来自同一个来源?
2.如果文档重复了代码中的知识点,能否从部分代码中生成部分文档,或者反之,或者两者都来自同一个更高级的表现形式?
3.如果头文件和接口声明重复了实现代码中的知识点,是否可以找到一种方法,从代码中生成头文件和接口声明?
数据结构也存在类似的SPOT原则:“无垃圾,无混淆”(No junk, no confusion)。无垃圾时说数据结构应该最小化,比如,不要让数据结构太通用,居然还能表示不可能存在的情况。“无混淆”是指在其真实世界中绝对明确清晰的状态在模型中也应该同样明确清晰。
简言之,SPOT原则就是提倡寻找一种数据结构,使得模型中的状态个真实世界系统的状态能够一一对应。