Припустимо, у нас є програмний модуль A, який реалізує функцію F. Інший модуль B реалізує ту ж функцію, що і F '.
Існує кілька способів позбутися від дублюючого коду:
- Нехай A використовує F 'від B.
- Нехай B використовує F від A.
- Помістіть F у власний модуль C і дозвольте їм використовувати і A, і B.
Усі ці параметри генерують додаткові залежності між модулями. Вони застосовують принцип DRY за рахунок збільшення зчеплення.
Наскільки я бачу, зв’язок завжди збільшується або в оренді переміщується на більш високий рівень при застосуванні DRY. Схоже, існує конфлікт між двома найосновнішими принципами розробки програмного забезпечення.
(Насправді, мені не здається дивним, що існують подібні конфлікти. Це, мабуть, те, що хороший дизайн програмного забезпечення настільки важкий. Мені здається дивним, що ці конфлікти зазвичай не розглядаються у вступних текстах.)
Правка (для уточнення): Я припускаю, що рівність F і F '- це не просто збіг. Якщо F доведеться модифікувати, F ', ймовірно, доведеться модифікувати таким же чином.