Зависимость и дублирование 
Сейчас перечитываю книгу ”Экстремальное программирование разработка через тестирование” автор Кент Бек. Наткнулся на одну хорошую мысль, которая как-то не бросилась мне в глаза раньше. Позволю себе изложить ее суть в своей вольной интерпретации.
Если сказать совсем коротко, то проблема дублирования кода - это не проблема вовсе, а симптом другой болезни, которая называется ”Зависимость”. Речь конечно о зависимости между различными частями программы.
На ранних стадиях зависимость легко проследить между тестами и кодом - изменение одного невозможно сделать без изменения другого. Если не использовать TDD, то зависимости проявляются гораздо позже, уже на готовом проекте. На этой стадии исправить их становится гораздо сложнее.
Но вернемся к дублированию. Чаще всего дублирование проявляется в виде дублирования логики - одно и то же выражение встречается в разных частях программы (при этом оформление может меняться, но суть остается). Чтобы внести исправление приходится вносить изменения в каждое выражение. Это и есть проявление зависимости. Избавляясь от дублирования мы автоматически уменьшаем зависимость.
Поэтому, рефакторинг после получения зеленой линии - это весьма полезная практика, которая позволяет облегчить написание будущих тестов и улучшает самочувствие проекта.
Анализируя свою практику работы в стиле TDD, могу заметить, что очень часто у меня возникает желание провести рефакторинг не сразу после завершения работы над тестом, а после реализации серии тестов. Т.е. фактически я откладываю на потом, то что нужно делать сейчас. Возможно, тем самым я неявно усложняю себе жизнь.
В ближайшее время постараюсь сконцентрироваться на рефакторинге и посмотреть, что получиться. О результатах отпишусь в блоге.
подписаться на блог
dkrnl
Гость
У Кент Бека все замудрено, и много воды.
мне, в свое время, больше помогли эти пару статей:
http://wiki.agiledev.ru/doku.php?id=ooad:manage_dependencies_in_php_code - Управление зависимостями в PHP-коде
http://wiki.agiledev.ru/doku.php?id=ooad:dependency_injection - Инверсия зависимостей при проектировании Объектно-Ориентированных систем
Evgeny Sergeev
Веб-разработчик, автор блога codeart.ru
Я после первого прочтения тоже мало что понял. Зато сейчас перечитываю и многие вещи становятся понятнее.
Инфу по ссылкам читал. Жаль что на форуме agiledev вялотекущее общение. Ресурс хороший.
Leave a Reply