假设我们有一个实现功能F的软件模块A。另一个模块B实现了与F'相同的功能。
有多种方法可以消除重复的代码:
- 让A使用B的F'。
- 让B使用A中的F。
- 将F放入自己的模块C中,让A和B都使用它。
所有这些选项都会在模块之间生成其他依赖关系。他们以增加耦合为代价应用了DRY原理。
据我所知,在应用DRY时,耦合总是增加或至少增加到更高的水平。软件设计的两个最基本的原则之间似乎存在冲突。
(实际上,这样的冲突并不令人惊讶。这可能是使良好的软件设计如此困难的原因。我确实感到惊讶的是,通常在介绍性文本中未解决这些冲突。)
编辑(为澄清起见):我认为F和F'的相等不只是一个巧合。如果必须修改F,则很可能必须以相同的方式修改F'。