Using DRY: Between Code Duplication and High-Coupling

6yrop

http://www.infoq.com/news/2012/05/DRY-code-duplication-coupl...
When two methods on the same object do some of the same work, we typically extract a third method to which they both delegate. Both of the original methods are coupled to the extracted method and, indirectly, to each other. This seems perfectly logical and harmless in the context of a single object, but how about when we recognize similar behavior across two objects? To reduce that duplication we need to either introduce a new object they both depend on or, far worse and sadly too often, we have one object depend on the other. The latter approach often leads to dependencies between objects that are unrelated, reducing their ability to evolve over time. Introducing a new object increases the overall surface of the system, and requires thought and care that it doesn't always receive when introduced when refactoring.
А может на х..й эти объекты? Нет объектов нет проблем?
Как без объектов? Ответ: статическая типизация, позволяющая сделать хорошую навигацию по коду и рефакторинг на основе формальных правил языка.

ivan1611

new object increases the overall surface of the system
Сомнительное утверждение. Почему? Если наследовать? Тока зачем его пихать в этом случае, юзайте has-a а не is-a.

6yrop

Сомнительное утверждение.
Похоже это название таракана в голове у людей с ООП головного мозга. И этот таракан требует размышлений и заботы "requires thought and care". К языковым конструкциям (к коду) это, по-видимому, отношения не имеет, поскольку с точки зрения языковых конструкций введение метода и введение объекта не имеют принципиального различия. А у авторов статьи введение метода вполне логично и безвредно, а введение объекта катастрофично. Видимо в ОО мозгах происходят какие-то тайные процессы.

Hastya

Надуманная проблема, ИМХО. В создании новых объектов нет ничего плохого. Более того, наиболее типична ситуация, когда в процессе эволюции кода такие объекты получают дополнительную начинку и начинают обрисовываться более четко, возможно даже, что выявятся какие-то понятия предметной области, которые им соответствуют. Ибо одинаковое поведение обычно что-то значит.

6yrop

да, вывод или выявление “понятий предметной области” посредством кода это круто. Я к этому и клоню :).

Hastya

Привязка, а не выявление. Предметная область уже существует.

6yrop

ты же написал
 
возможно даже, что выявятся какие-то понятия предметной области, которые им соответствуют.
  

6yrop

Если у тебя в первом посте "выявление" имеет смысл привязки, то твое утешение:
Более того, наиболее типична ситуация, когда в процессе эволюции кода такие объекты получают дополнительную начинку и начинают обрисовываться более четко, возможно даже, что выявятся какие-то понятия предметной области, которые им соответствуют.

не имеет отношение к проблеме, упомянутой в первом посте, поскольку там про увеличение

Introducing a new object increases the overall surface of the system, and requires thought and care

Если "уже существует", то не говорили бы про увеличение.

Hastya

Если "уже существует", то не говорили бы про увеличение.
Я так понял, что оригинальный текст выражает недовольство синтетическими объектами, возникающими как результат рефакторинга. Как я уже сказал, ничего страшного в появлении таковых я не вижу. Можно, конечно, пофлудить на тему "уже существует".
Оставить комментарий
Имя или ник:
Комментарий: