设计原则 - KISS、YAGNI、DRY

设计原则 - KISS、YAGNI、DRY

文章是学习 《设计模式之美》- 王争 的总结

1 引言

KISS、YAGNI、DRY 原则概念比较简单,主要都是为了让我们写出更简单和合理的代码。越简单的方法,解决复杂问题,越能表现出一个人的技术能力!

2 概述

KISS 原则

英文 Keep it simple and stupid 的缩写,简单的说就是:尽量保持代码简单。

遵循 KISS 原则的话,日常写代码可以这么要求自己:

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

YAGNI 原则

英文 “You Ain’t Gonna Need It” 的缩写,直白的意思就是:你不会需要它。

当用在软件开发中的时候,它的意思是:不要去设计当前用不到的功能;不要去编写当前用不到的代码。实际上,这条原则的核心思想就是:不要做过度设计。

比如前端项目中 package.json 过多的依赖一些没用到的模块,或者是配置一下当前没有用上的配置,编写可能没有用的代码等情况。

要注意的是 YAGNI 不代表在任何情况你不考虑扩展性设计,要明白设计原则中 单一职责、开闭原则、里式替换原则、接口隔离原则、依赖注入原则等都基本是围绕着扩展性、易读性、易维护性等理念的,同样 KISS、YAGNI 也是为了易读性、保持易扩展性。而扩展性是需要在写代码的时候做一些预留的设计,比如将来不久或者可能特换的代码或者配置等。这并不是冲突的,而应该是相辅相成。

KISS重点是如何做(尽量保持简单),YAGNI 是要不要做(当前不需要做的尽量不要做)。

DRY 原则

英文“Don’t Repeat Yourself” 的缩写,直白的意思是:不要重复代码。

违法 DRY 原则的代码重复分为三种:实现逻辑重复功能语义重复代码执行重复

代码复用性(Code Reusability)

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

代码复用表示一种行为:我们在开发新功能的时候,尽量复用已经存在的代码。代码的可复用性表示一段代码可被复用的特性或能力:我们在编写代码的时候,让代码尽量可复用。DRY 原则是一条原则:不要写重复的代码。从定义描述上,它们好像有点类似,但深究起来,三者的区别还是蛮大的。

怎么提高代码复用性?

  • 减少代码耦合
  • 满足单一职责原则
  • 模块化
  • 业务与非业务逻辑分离
  • 通用代码下沉
  • 继承、多态、抽象、封装
  • 应用模板等设计模式

总结

在设计每个模块、类、函数的时候,要像设计一个 外部 API 一样去思考它的复用性。

在第一次写代码的时候,如果当下没有复用的需求,而未来的复用需求也不是特别明确,并且开发科复用代码的成本较高,那我们就不需要考虑代码的复用性。在之后开发新功能的时候,发现可以复用之前写的代码,那我们就重构这段代码,让其变得更加可复用。


欢迎前往原文讨论:https://github.com/giscafer/blog/issues/48

相关文章