1. 概述

在本篇文章中,我们将介绍 DRY 这一软件设计原则,并通过示例说明其在代码中的实际应用。

2. 定义

DRY(Don’t Repeat Yourself),即“不要重复你自己”,是一种旨在消除代码逻辑重复的软件开发原则。

该原则最早由《The Pragmatic Programmer》一书提出,核心思想是:同一份逻辑在整个代码库中应该只出现一次

3. 示例

举个例子,如果我们把一段特定逻辑封装成一个函数,并在多个地方调用它,这就是对 DRY 原则的实践。

以下是一个在未使用 DRY 原则时的伪代码,它接收两个华氏温度值并转换为摄氏温度:

algorithm ConvertTemperaturesBeforeDRY(fah1, fah2):
    // INPUT
    //   fah1, fah2 = 两个华氏温度值
    // OUTPUT
    //   输出对应的摄氏温度值

    cel1 <- (fah1 - 32) * 5 / 9
    cel2 <- (fah2 - 32) * 5 / 9

    print cel1
    print cel2

下面是使用 DRY 原则优化后的版本:

algorithm ConvertTemperaturesAfterDRY(fah1, fah2):
    // INPUT
    //   fah1, fah2 = 两个华氏温度值
    // OUTPUT
    //   输出对应的摄氏温度值

    cel1 <- fahrenheitToCelsius(fah1)
    cel2 <- fahrenheitToCelsius(fah2)

    print cel1
    print cel2

function fahrenheitToCelsius(fah):
    // 将华氏温度转换为摄氏温度
    return (fah - 32) * 5 / 9

可以看到,转换逻辑被集中到了一个函数 fahrenheitToCelsius 中,从而避免了重复。

4. DRY 的优势

提高可维护性:当需要修改逻辑或添加新功能时,只需修改一个地方,而不是在多个地方重复修改。
提高可读性:代码更简洁,没有冗余逻辑,更易于理解和调试。

注意:滥用 DRY 也可能带来问题。比如过度抽象、创建不必要的函数等,反而会增加代码复杂度,降低可读性。
⚠️ 所以,在使用 DRY 时要把握好度,避免为了“不重复”而“强行抽象”。

5. 与 DRY 相反的做法:WET

WET(可以理解为 We Enjoy Typing、Write Every Time、Waste Everyone’s Time)是指在代码中重复编写相同的逻辑,这与 DRY 原则背道而驰。

❌ 这种方式会导致代码难以维护和阅读,尤其是当逻辑需要修改时,必须同步修改多个位置,极易出错。

6. 总结

本文介绍了 DRY 软件设计原则的基本概念、示例和优势。
DRY 是一种非常实用的设计理念,但要注意避免过度抽象。
在实际开发中,合理使用 DRY 可以显著提升代码质量与可维护性。


原始标题:DRY Software Design Principle