Angenommen, wir haben ein Softwaremodul A, das eine Funktion F implementiert. Ein anderes Modul B implementiert die gleiche Funktion wie F '.
Es gibt verschiedene Möglichkeiten, um den doppelten Code zu entfernen:
- A benutze F 'aus B.
- Lassen Sie B F von A verwenden.
- Setzen Sie F in sein eigenes Modul C ein und lassen Sie A und B es verwenden.
Alle diese Optionen erzeugen zusätzliche Abhängigkeiten zwischen Modulen. Sie wenden das DRY-Prinzip auf Kosten der Erhöhung der Kopplung an.
Soweit ich sehen kann, wird die Kopplung beim Auftragen von DRY immer erhöht oder zumindest auf ein höheres Niveau verschoben. Es scheint einen Konflikt zwischen zwei der grundlegendsten Prinzipien des Software-Designs zu geben.
(Eigentlich finde ich es nicht verwunderlich, dass es solche Konflikte gibt. Dies ist wahrscheinlich der Grund, warum gutes Software-Design so schwierig ist. Ich finde es verwunderlich, dass diese Konflikte normalerweise nicht in einleitenden Texten behandelt werden.)
Edit (zur Verdeutlichung): Ich gehe davon aus, dass die Gleichheit von F und F 'nicht nur ein Zufall ist. Wenn F modifiziert werden muss, muss F 'wahrscheinlich auf die gleiche Weise modifiziert werden.