You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

请教:Ron Jeffries所说“将实现封装到更抽象的方法/类中”的含义

嘿,我来帮你拆解Ron Jeffries这段表述的核心意思,毕竟《Clean Code》里的这些经验之谈确实值得细品:

首先先把原文贴出来:

从事编码工作多年后,我发现所有程序都由极为相似的元素构成。例如‘在集合中查找元素’——我们常需从集合中获取特定项,此时我常会将实现封装到更抽象的方法或类中。

咱们分两部分来理解:

1. 「所有程序都由极为相似的元素构成」到底指什么?

这其实是Ron Jeffries多年编码后悟到的一个底层规律:不管业务场景看起来多花哨复杂,支撑程序运行的底层操作都是那些重复出现的“基础积木”

比如:

  • 从一堆数据里找特定内容(就是他举的集合查找例子)
  • 给数据排序、过滤
  • 对数据做增删改操作
  • 处理不同条件分支
  • 管理状态变化

你写电商系统要找用户的历史订单,写社交APP要找某个用户的动态,甚至写一个简单的TODO工具要找未完成的任务——本质上都是「从集合中定位特定元素」这类重复操作的变体。复杂的程序只是把这些基础操作组合、嵌套起来而已。

2. 为什么要把「集合中查找元素」封装成抽象方法/类?

这部分是他给出的实践建议:不要每次需要查找时都手写一遍循环、判断的代码,而是把这个逻辑封装起来

举个具体的例子:
如果每次找用户都写:

// 重复写的查找代码
User targetUser = null;
for (User user : userList) {
    if (user.getId().equals(targetId)) {
        targetUser = user;
        break;
    }
}

不如封装成一个方法:

// 封装后的抽象方法
public User findUserById(List<User> userList, String targetId) {
    for (User user : userList) {
        if (user.getId().equals(targetId)) {
            return user;
        }
    }
    return null;
}

之后每次找用户,只需要调用findUserById(userList, targetId)就行。

这么做的好处:

  • 少写重复代码:避免复制粘贴带来的冗余和出错概率
  • 易维护:如果以后要优化查找逻辑(比如改成用哈希表提升效率),只需要改这一个方法,不用在代码里找遍所有手写循环的地方
  • 可读性更高:其他开发者看到方法名就知道这是要找用户,不用读一堆循环代码才明白意图

总结下来,Ron Jeffries这段表述的核心是:编程的本质是用重复的基础操作构建复杂系统,而封装这些重复操作是写出干净、可维护代码的关键习惯


内容的提问来源于stack exchange,提问作者E-SetPrimeEpsilon

火山引擎 最新活动