// codeart.ru / Офтопик / Зависимость и дублирование Форум

Зависимость и дублирование rss подписка

Автор: Evgeniy Sergeev

Сейчас перечитываю книгу »Экстремальное программирование разработка через тестирование» автор Кент Бек. Наткнулся на одну хорошую мысль, которая как-то не бросилась мне в глаза раньше. Позволю себе изложить ее суть в своей вольной интерпретации.

Если сказать совсем коротко, то проблема дублирования кода — это не проблема вовсе, а симптом другой болезни, которая называется »Зависимость». Речь конечно о зависимости между различными частями программы.

На ранних стадиях зависимость легко проследить между тестами и кодом — изменение одного невозможно сделать без изменения другого. Если не использовать TDD, то зависимости проявляются гораздо позже, уже на готовом проекте. На этой стадии исправить их становится гораздо сложнее.

Но вернемся к дублированию. Чаще всего дублирование проявляется в виде дублирования логики — одно и то же выражение встречается в разных частях программы (при этом оформление может меняться, но суть остается). Чтобы внести исправление приходится вносить изменения в каждое выражение. Это и есть проявление зависимости. Избавляясь от дублирования мы автоматически уменьшаем зависимость.

Поэтому, рефакторинг после получения зеленой линии — это весьма полезная практика, которая позволяет облегчить написание будущих тестов и улучшает самочувствие проекта.

Анализируя свою практику работы в стиле TDD, могу заметить, что очень часто у меня возникает желание провести рефакторинг не сразу после завершения работы над тестом, а после реализации серии тестов. Т.е. фактически я откладываю на потом, то что нужно делать сейчас. Возможно, тем самым я неявно усложняю себе жизнь.

В ближайшее время постараюсь сконцентрироваться на рефакторинге и посмотреть, что получиться. О результатах отпишусь в блоге.

  1. У Кент Бека все замудрено, и много воды.
    мне, в свое время, больше помогли эти пару статей:
    http://wiki.agiledev.ru/doku.php?id=ooad:manage_dependencies_in_php_code — Управление зависимостями в PHP-коде
    http://wiki.agiledev.ru/doku.php?id=ooad:dependency_injection — Инверсия зависимостей при проектировании Объектно-Ориентированных систем

  2. Я после первого прочтения тоже мало что понял. Зато сейчас перечитываю и многие вещи становятся понятнее.
    Инфу по ссылкам читал. Жаль что на форуме agiledev вялотекущее общение. Ресурс хороший.

Leave a Reply

« »