В этой книге речь идет не только о совершенно конкретном коде, но и о совершенно конкретном проектировании. Качественное проектирование должно стать нашей конечной целью, а унаследованный код — это некий промежуточный результат на пути к этой цели. В некоторых главах этой книги описываются способы ввода нового кода в уже существующую базу кода и показывается, как это делается, исходя из удачно выбранных принципов проектирования. Конечно, вы можете постепенно расширить участки очень хорошего, качественного кода в базе унаследованного кода, но не удивляйтесь, если на определенной стадии внесения изменений код станет скверным. Такая работа сродни хирургическому вмешательству. Нам нужно сделать разрез, добраться до внутренностей и, оставив на время эстетические соображения, ответить на вопрос — можно ли улучшить состояние внутренних органов пациента? Если да, то должны ли мы сразу же зашить пациента, посоветовать ему правильно питаться и бегать на длинные дистанции и тут же забыть о его болезни? Конечно, можно поступить и так, но на самом деле нам нужно объективно оценить состояние здоровья пациента, правильно поставить диагноз его заболевания, постараться вылечить и вернуть пациента в более здоровое состояние. Возможно, он уже не будет отличаться олимпийским здоровьем, но нельзя себе позволить, чтобы лучшее стало врагом хорошего. Базы кода должны стать более здоровыми и простыми в использовании. Если пациент почувствует себя чуть лучше, то это зачастую очень удобный момент, чтобы помочь ему придерживаться более здорового образа жизни. Именно эту цель мы и преследуем в отношении унаследованного кода, т.е. мы пытаемся добиться того момента, когда обычно испытываем облегчение. Мы его ожидаем и активно стремимся упростить изменение кода. А когда мы поддерживаем это ощущение во всей группе разработчиков, то результаты проектирования сразу же улучшаются.
Author(s): Физерс М.
Publisher: Вильямс
Year: 2009
Language: Russian
Commentary: обрезал поля, +обложку
Pages: 400
Введение 21
Часть I. Внутренний механизм изменений в коде 23
Глава 1. Изменения в программном коде 25
Глава 2. Работа с ответной реакцией 31
Глава 3. Распознавание и разделение 41
Глава 4. Модель шва 49
Глава 5. Инструментальные средства 65
Часть II. Изменение программного обеспечения 75
Глава 6. Изменения необходимы, а времени на это нет 77
Глава 7. Изменения до бесконечности 95
Глава 8. Как ввести новое свойство 103
Глава 9. Класс нельзя ввести в средства тестирования 119
Глава 10. Метод нельзя выполнить в средствах тестирования 149
Глава 11. Требуются изменения в коде, но неизвестно, какие методы следует тестировать 163
Глава 12. На одном участке требуется внести много изменений, но следует ли разрывать зависимости со всеми классами, имеющими к этому отношение 181
Глава 13. В код требуется внести изменения, но неизвестно, какие тесты писать 191
Глава 14. Убийственная зависимость от библиотек 201
Глава 15. Приложение состоит из сплошных вызовов интерфейса API 203
Глава 16. Код недостаточно понятен для его изменения 211
Глава 17. У приложения отсутствует структура 215
Глава 18. Когда тестовый код мешает 223
Глава 19. Как благополучно изменить процедурный код 227
Глава 20. Класс слишком крупный и его дальнейшее укрупнение нежелательно 241
Глава 21. Изменение одного и того же кода повсеместно 261
Глава 22. Необходимо изменить гигантский метод, но нельзя написать для него тест 279
Глава 23. Как узнать, нарушают ли что-нибудь изменения в коде 297
Глава 24. Сдаемся — дальнейшее улучшение невозможно 305
Часть III. Методы разрыва зависимостей 307
Глава 25. Способы разрыва зависимостей 309
Приложение. Реорганизация кода 383
Словарь специальных терминов 387
Предметный указатель 389