Załóżmy, że mamy moduł oprogramowania A, który implementuje funkcję F. Inny moduł B implementuje tę samą funkcję co F '.
Istnieje wiele sposobów na pozbycie się duplikatu kodu:
- Niech A użyje F 'z B.
- Niech B użyje F z A.
- Umieść F we własnym module C i pozwól, aby korzystały z niego zarówno A, jak i B.
Wszystkie te opcje generują dodatkowe zależności między modułami. Stosują zasadę OSUSZANIA kosztem rosnącego sprzężenia.
O ile widzę, sprzężenie jest zawsze zwiększane lub w leasingu przenoszone na wyższy poziom podczas stosowania DRY. Wydaje się, że istnieje konflikt między dwiema najbardziej podstawowymi zasadami projektowania oprogramowania.
(Właściwie nie wydaje mi się zaskakujące, że takie konflikty są takie. Prawdopodobnie to sprawia, że dobry projekt oprogramowania jest tak trudny. Zaskakujące jest to, że konflikty te zwykle nie są omawiane w tekstach wprowadzających.)
Edycja (dla wyjaśnienia): Zakładam, że równość F i F 'to nie tylko przypadek. Jeśli F będzie musiał zostać zmodyfikowany, F 'prawdopodobnie będzie musiał zostać zmodyfikowany w ten sam sposób.