DRY的幻觉:你消灭的重复,正以耦合的形式回来找你
Posted by quentin 在 Wednesday, 3 June 2026DRY——Don't Repeat Yourself。这四个字母可能是软件工程里被引用最多、被误解最深的原则。
每个程序员入行第一天就被告知:重复代码是邪恶的,看到重复就要提取,看到提取就要抽象,看到抽象就要泛化。于是我们疯狂地消灭重复——公共函数、工具类、基础库、共享模块......代码库越来越"干净",重复率越来越低,CI里没有任何duplicate code的警告。
然后某一天,一个业务需求来了——需要改动某个"公共"逻辑。你打开那个被47个地方引用的utils函数,改了一行,跑了一下测试——绿了。上线,结果三个业务线同时报警。你突然发现,那三个业务线依赖的是同一个函数的三种不同行为,被那个"公共"函数强制统一了。
你消灭了重复代码,但你制造了耦合。而耦合,是比重复贵十倍的技术债。
重复代码不是问题,问题是不知道为什么重复
所有关于DRY的讨论,都默认了一个前提:重复等于坏。但这个前提本身就是幻觉。
重复代码至少有三种完全不同的面目。
第一种是意外重复——两个开发者不知道对方写了同样的功能,造了两个轮子。这种重复才是真正需要消灭的,因为它意味着信息浪费和潜在的不一致。