Suponha que temos um módulo de software A que implementa uma função F. Outro módulo B implementa a mesma função que F '.
Existem várias maneiras de se livrar do código duplicado:
- Deixe A usar F 'de B.
- Deixe B usar F de A.
- Coloque F em seu próprio módulo C e deixe que A e B o usem.
Todas essas opções geram dependências adicionais entre os módulos. Eles aplicam o princípio DRY ao custo de aumentar o acoplamento.
Tanto quanto posso ver, o acoplamento é sempre aumentado ou, quando alugado, passa para um nível mais alto ao aplicar o DRY. Parece haver um conflito entre dois dos princípios mais básicos do design de software.
(Na verdade, não acho surpreendente a existência de conflitos como esse. Provavelmente é isso que torna o bom design de software tão difícil. Acho surpreendente que esses conflitos normalmente não sejam abordados em textos introdutórios.)
Editar (para esclarecimento): Presumo que a igualdade de F e F 'não seja apenas uma coincidência. Se F precisar ser modificado, F 'provavelmente precisará ser modificado da mesma maneira.