其余常见的代码编写原则

Uncategorized
1.3k words

KISS 原则

KISS原则有以下三种经典的解释:

  1. Keep It Simple and Stupid.
  2. Keep It Short and Simple.
  3. Keep It Simple and Straightforward.

越底层封装成都越高、改动越少的模块可以更优先考虑性能,代码逻辑复杂可以接受。越上层改动越多的代码尽可能的要提升可读性。并非代码行数越少越好。

如何写出满足 KISS 原则的代码?
  1. 不要使用同事可能不懂的技术来实现代码。比如前面例子中的正则表达式,还有一些编程语言中过于高级的语法等。
  2. 不要重复造轮子,要善于使用已经有的工具类库。经验证明,自己去实现这些类库,出 bug 的概率会更高,维护的成本也比较高。
  3. 不要过度优化。不要过度使用一些奇技淫巧(比如,位运算代替算术运算、复杂的条件语句代替 if-else、使用一些过于底层的函数等)来优化代码,牺牲代码的可读性。

YAGNI 原则

You Ain’t Gonna Need It

不要去设计当前用不到的功能;不要去编写当前用不到的代码,不要做过度设计。

比如,我们的系统暂时只用 Redis 存储配置信息,以后可能会用到 ZooKeeper。根据 YAGNI 原则,在未用到 ZooKeeper 之前,我们没必要提前编写这部分代码,我们可以预留好扩展点,等到需要的时候,再去实现 ZooKeeper 存储配置信息这部分代码。

KISS 原则讲的是“如何做”的问题(尽量保持简单),而 YAGNI 原则说的是“要不要做”的问题

DRY 原则

Don’t Repeat Yourself

实现逻辑重复、功能语义重复、代码执行重复。实现逻辑重复,但功能语义不重复的代码,并不违反 DRY 原则。实现逻辑不重复,但功能语义重复的代码,也算是违反 DRY 原则。除此之外,代码执行重复也算是违反 DRY 原则。

代码复用性(Code Reusability)

区分三个概念:代码复用性(Code Reusability)、代码复用(Code Resue)和DRY原则。

怎么提高代码复用性?
  1. 减少代码耦合
  2. 满足单一职责原则
  3. 模块化
  4. 业务与非业务逻辑分离
  5. 通用代码下沉
  6. 继承、多态、抽象、封装
  7. 应用模板等设计模式

迪米特法则(LOD)

Each unit should have only limited knowledge about other units: only units “closely” related to the current unit. Or: Each unit should only talk to its friends; Don’t talk to strangers.

即:不该有直接依赖关系的类之间,不要有依赖

何为“高内聚、松耦合”?

所谓高内聚,就是指相近的功能应该放到同一个类中,不相近的功能不要放到同一个类中。相近的功能往往会被同时修改,放到同一个类中,修改会比较集中,代码容易维护。单一职责原则是实现代码高内聚非常有效的设计原则。

所谓松耦合是说,在代码中,类与类之间的依赖关系简单清晰。即使两个类有依赖关系,一个类的代码改动不会或者很少导致依赖类的代码改动。前面讲的依赖注入、接口隔离、基于接口而非实现编程,以及迪米特法则,都是为了实现代码的松耦合。

Comments