Supponiamo di avere un modulo software A che implementa una funzione F. Un altro modulo B implementa la stessa funzione di F '.
Esistono diversi modi per sbarazzarsi del codice duplicato:
- Consenti A usa F 'da B.
- Consenti a B di usare F da A.
- Inserisci F nel proprio modulo C e lascia che sia A sia B lo usino.
Tutte queste opzioni generano dipendenze aggiuntive tra i moduli. Applicano il principio DRY a costo di aumentare l'accoppiamento.
Per quanto posso vedere, l'accoppiamento è sempre aumentato o in leasing spostato a un livello più alto quando si applica DRY. Sembra esserci un conflitto tra due dei principi più basilari del design del software.
(In realtà non trovo sorprendente che ci siano conflitti del genere: è probabilmente questo a rendere così difficile la buona progettazione del software, ma trovo sorprendente che questi conflitti non siano normalmente affrontati nei testi introduttivi.)
Modifica (per chiarimenti): presumo che l'uguaglianza di F e F 'non sia solo una coincidenza. Se F dovrà essere modificato, F 'probabilmente dovrà essere modificato allo stesso modo.