фаулер кент рефакторинг улучшение проекта существующего кода

Фаулер кент рефакторинг улучшение проекта существующего кода

фаулер кент рефакторинг улучшение проекта существующего кода. Смотреть фото фаулер кент рефакторинг улучшение проекта существующего кода. Смотреть картинку фаулер кент рефакторинг улучшение проекта существующего кода. Картинка про фаулер кент рефакторинг улучшение проекта существующего кода. Фото фаулер кент рефакторинг улучшение проекта существующего кода

фаулер кент рефакторинг улучшение проекта существующего кода. Смотреть фото фаулер кент рефакторинг улучшение проекта существующего кода. Смотреть картинку фаулер кент рефакторинг улучшение проекта существующего кода. Картинка про фаулер кент рефакторинг улучшение проекта существующего кода. Фото фаулер кент рефакторинг улучшение проекта существующего кода

Библиотека программиста запись закреплена

М. Фаулер «Рефакторинг. Улучшение существующего кода»(pdf)

Подход к улучшению структурной целостности и производительности существующих программ, называемый рефакторингом, получил развитие благодаря усилиям экспертов в области ООП, написавших эту книгу. Каждый шаг рефакторинга прост. Это может быть перемещение поля из одного класса в другой, вынесение фрагмента кода из метода и превращение его в самостоятельный метод или даже перемещение кода по иерархии классов. Каждый отдельный шаг может показаться элементарным, но совокупный эффект таких малых изменений в состоянии радикально улучшить проект или даже предотвратить распад плохо спроектированной программы.

Мартин Фаулер с соавторами пролили свет на процесс рефакторинга, описав принципы и лучшие приемы его осуществления, а также указав, где и когда следует начинать углубленное изучение кода с целью его улучшения. Основу книги составляет подробный перечень более 70 методов рефакторинга, для каждого из которых описываются мотивация и техника испытанного на приктике преобразования кода с примерами на Java. Рассмотренные в книге методы позволяют поэтапно модифицировать код, внося каждый раз небольшие изменения, благодаря чему снижается риск, связанный с развитием проекта.

Источник

Фаулер кент рефакторинг улучшение проекта существующего кода

фаулер кент рефакторинг улучшение проекта существующего кода. Смотреть фото фаулер кент рефакторинг улучшение проекта существующего кода. Смотреть картинку фаулер кент рефакторинг улучшение проекта существующего кода. Картинка про фаулер кент рефакторинг улучшение проекта существующего кода. Фото фаулер кент рефакторинг улучшение проекта существующего кода

фаулер кент рефакторинг улучшение проекта существующего кода. Смотреть фото фаулер кент рефакторинг улучшение проекта существующего кода. Смотреть картинку фаулер кент рефакторинг улучшение проекта существующего кода. Картинка про фаулер кент рефакторинг улучшение проекта существующего кода. Фото фаулер кент рефакторинг улучшение проекта существующего кода

Physics.Math.Code запись закреплена

Рефакторинг: улучшение проекта существующего кода (2019)
Мартин Фаулер, Кент Бек, Джон Брант, Уильям Опдайк, Дон Робертс

Переиздание классического труда по информатике, новый современный перевод! Рефакторинг уже давно и прочно занимает свое достойное место среди технологий программирования, и не в последнюю очередь благодаря книге Мартина Фаулера — одной из тех книг, которые написаны «на все времена» и которые, как хорошее вино, со временем становятся только ценнее. Данная классическая книга достойна того, чтобы занять свое место на книжной полке каждого серьезного программиста — вне зависимости от используемого языка программирования.

Сам принцип рефакторинга прост: это последовательность небольших шагов, таких как перемещение поля из одного класса в другой, вынесение фрагмента кода из метода и его превращение в самостоятельный метод или даже перемещение кода по иерархии классов. Каждый такой шаг выглядит настолько просто и естественно, что кажется удивительным — о чем здесь можно писать? Однако кумулятивный эффект от таких малых изменений состоит в существенном улучшении проекта существующего кода.

Источник

Фаулер кент рефакторинг улучшение проекта существующего кода

фаулер кент рефакторинг улучшение проекта существующего кода. Смотреть фото фаулер кент рефакторинг улучшение проекта существующего кода. Смотреть картинку фаулер кент рефакторинг улучшение проекта существующего кода. Картинка про фаулер кент рефакторинг улучшение проекта существующего кода. Фото фаулер кент рефакторинг улучшение проекта существующего кода

фаулер кент рефакторинг улучшение проекта существующего кода. Смотреть фото фаулер кент рефакторинг улучшение проекта существующего кода. Смотреть картинку фаулер кент рефакторинг улучшение проекта существующего кода. Картинка про фаулер кент рефакторинг улучшение проекта существующего кода. Фото фаулер кент рефакторинг улучшение проекта существующего кода

Physics.Math.Code запись закреплена

Рефакторинг кода на Javascript [2019] Мартин Фаулер

Рефакторинг уже давно и прочно занимает свое достойное место среди технологий программирования, и не в последнюю очередь благодаря книге Мартина Фаулера «Рефакторинг. Улучшение проекта существующего кода» (1-е издание) — одной из тех книг, которые написаны “на все времена”

Сам принцип рефакторинга прост: это последовательность небольших шагов, таких как перемещение поля из одного класса в другой, вынесение фрагмента кода из метода и его превращение в самостоятельный метод или даже перемещение кода по иерархии классов. Каждый такой шаг выглядит настолько просто и естественно, что кажется удивительным — о чем здесь можно писать? Однако кумулятивный эффект от таких малых изменений состоит в существенном улучшении проекта существующего кода

Мартин Фаулер и другие высококлассные специалисты в области объектно-ориентированного программирования, принявшие участие в написании этой книги, изложили принципы и наиболее эффективные методики выполнения различных рефакторингов и показали, когда и как следует тщательно изучать код с целью его улучшения.

В книге подробно описано более 60 методов рефакторинга, причем приведено не только их теоретическое описание, но и практические примеры на языке программирования JavaScript. Применение JavaScript и описание “рефакторинга без классов” является одним из отличий нового издания книги от старого.

Если первое издание книги можно было сравнить с хорошим вином, которое со временем становятся только ценнее, то второе издание можно сравнить с шампанским — идеи в книге опьяняют, а их изложение искрится и играет.

Второе издание классической книги «Рефакторинг кода на JavaScript: улучшение проекта существующего кода» достойно того, чтобы занять свое место на книжной полке каждого серьезного программиста — вне зависимости от используемого языка программирования.

Оригинал книги: «Refactoring: Improving the Design of Existing Code» by Martin Fowler, 2nd Edition, 448 pages, ISBN 9780134757599, December 2018

Предисловие к первому изданию
Введение
Глава 1. Первый пример рефакторинга
Глава 2. Принципы рефакторинга
Глава 3. Запах в коде
Глава 4. Создание тестов
Глава 5. На пути к каталогу рефакторингов
Глава 6. Первое множество рефакторингов
Глава 7. Инкапсуляция
Глава 8. Перенос функциональности
Глава 9. Организация данных
Глава 10. Упрощение условной логики
Глава 11. Рефакторинг API
Глава 12. Работа с наследованием

Источник

Рефакторинг: улучшение проекта существующего кода

Мартин Фаулер, Кент Бек, Джон Брант, Уильям Опдайк, Дон Робертс

Refactoring: Improving the Design of Existing Code
Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts

Переиздание классического труда по информатике, новый современный перевод!

Рефакторинг уже давно и прочно занимает свое достойное место среди технологий программирования, и не в последнюю очередь благодаря книге Мартина Фаулера — одной из тех книг, которые написаны «на все времена» и которые, как хорошее вино, со временем становятся только ценнее.

Сам принцип рефакторинга прост: это последовательность небольших шагов, таких как перемещение поля из одного класса в другой, вынесение фрагмента кода из метода и его превращение в самостоятельный метод или даже перемещение кода по иерархии классов. Каждый такой шаг выглядит настолько просто и естественно, что кажется удивительным — о чем здесь можно писать? Однако кумулятивный эффект от таких малых изменений состоит в существенном улучшении проекта существующего кода.

Мартин Фаулер и другие высококлассные специалисты в области объектно-ориентированного программирования, принявшие участие в написании этой книги, изложили принципы и наиболее эффективные методики выполнения различных рефакторингов и показали, когда и как следует тщательно изучать код с целью его улучшения. В книге подробно описано более 70 методов рефакторинга, причем приведено не только их теоретическое описание, но и практические примеры на языке программирования Java.

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

По мере распространения объектных технологий — в особенности с использованием языка программирования Java — для сообщества разработчиков программного обеспечения становилась все более и более актуальной новая проблема.

Недостаточно опытные разработчики создали множество плохо спроектированных программ, оказавшихся в результате малопроизводительными приложениями, которые трудно поддерживать и расширять. Все чаще разработчики программного обеспечения сталкиваются с тем, насколько сложно работать с такими доставшимися им в наследство приложениями. В течение нескольких лет объектные программисты-эксперты использовали постоянно растущую коллекцию методов повышения структурной целостности и эффективности таких существующих программ. Известные как «рефакторинг», эти практики так и оставались достоянием экспертов, потому что не предпринималось никаких попыток донести эти знания до широких масс разработчиков в доступной форме.

В данной книге известный эксперт в области объектных технологий Мартин Фаулер открывает перед сообществом разработчиков новые горизонты, рассказывая о практиках, применяемых экспертами, и демонстрируя, какие значительные преимущества от их применения может получить любой разработчик. При надлежащей подготовке квалифицированный проектировщик систем может взять плохо спроектированную программу и превратить ее в хорошо продуманный, надежный код. В книге Мартин Фаулер показывает читателям, где обычно можно найти возможности для оптимизации и как превратить плохой проект в хороший. Каждый шаг рефакторинга прост — даже, казалось бы, слишком прост, чтобы его стоило выполнять. Оптимизация может включать перемещение поля из одного класса в другой или извлечение некоторого кода из метода с тем, чтобы превратить его в отдельный метод, или даже перенос некоторого кода вверх или вниз по иерархии классов. Хотя эти отдельные шаги могут показаться элементарными, кумулятивный эффект таких небольших изменений может радикально улучшить проект программы. Рефакторинг кода — проверенный способ предотвращения распада программного обеспечения.

Помимо описания различных методов рефакторинга, автор приводит подробный каталог более чем с семьюдесятью рефакторингами и полезными указаниями, которые научат вас, когда их следует применять. Книга содержит подробное описание свыше 70 методов рефакторинга, причем не только теоретическое их описание, но и практические примеры на языке программирования Java. Следует учесть, что изложенные в книге идеи применимы к любому объектно-ориентированному языку программирования.

Об авторах

Мартин Фаулер — независимый консультант, который применяет объектные технологии для решения насущных проблем бизнеса около сорока лет. Он давал консультации по программным системам в таких областях, как здравоохранение, торговля и финансы. Среди его клиентов были Chrysler, Citibank, Министерство здравоохранения Великобритании, Andersen Consulting и Netscape Communications. Кроме того, Фаулер часто делает доклады по объектным технологиям, унифицированному языку моделирования UML и проектным шаблонам.

Кент Бек — известный программист, тестировщик ПО, специалист по рефакторингу, автор книг и игрок на банджо.

Джон Брант и Дон Робертс — авторы инструментария для автоматизированного выполнения рефакторингов Refactoring Browser for Smalltalk. Они также являются консультантами, около тридцати лет изучавшие практические и теоретические аспекты рефакторинга.

Диссертационная работа Уильяма Опдайка «Исследования по оптимизации объектно-ориентированных структур», выполненная в Университете Иллинойса, привела к первой важной публикации по этой теме. В настоящее время он работает в Lucent Technologies/Bell Laboratories.

Книга обсуждается в отдельном сообщении в блоге Виктора Штонда.

формат 70×100/16; серия Объектные технологии ; 03.07.2020; Вильямс.

Понравилась книга? Порекомендуйте её друзьям и коллегам:

Предисловие 21
Введение 23
Глава 1. Первый пример рефакторинга 31
Глава 2. Принципы рефакторинга 69
Глава 3. Запах в коде 93
Глава 4. Создание тестов 109
Глава 5. На пути к каталогу рефакторингов 125
Глава 6. Составление методов 131
Глава 7. Перенос функциональности между объектами 161
Глава 8. Организация данных 189
Глава 9. Упрощение условных выражений 255
Глава 10. Упрощение вызовов методов 289
Глава 11. Работа с обобщенностью 337
Глава 12. Крупномасштабные рефакторинги 375
Глава 13. Рефакторинг, повторное использование и реальность 395
Глава 14. Инструментарий для выполнения рефакторинга 419
Глава 15. Заключение 427
Библиография 431
Примечания 433
Список рефакторингов 435
Список запахов 437
Предметный указатель 439

Источник

Читать онлайн «Рефакторинг кода на JavaScript. Улучшение проекта существующего кода»

Автор Мартин Фаулер

Введение объекта параметра (с. 186)
Введение утверждения (с. 346)
Введение частного случая (с. 334)
Встраивание класса (с. 232)
Встраивание переменной (с. 169)
Встраивание функции (с. 161)
Декомпозиция условной инструкции (с. 306)
Замена вложенных условных конструкций граничным оператором (с. 312)
Замена временной переменной запросом (с. 225)
Замена встроенного кода вызовом функции (с. 268)
Замена вычисленной переменной запросом (с. 293)
Замена запроса параметром (с. 372)
Замена значения ссылкой (с. 300)
Замена кода типа подклассами (с. 405)
Замена команды функцией (с. 388)
Замена конструктора фабричной функцией (с. 379)
Замена параметра запросом (с. 369)
Замена подкласса делегатом (с. 424)
Замена примитива объектом (с. 221)
Замена ссылки значением (с. 296)
Замена суперкласса делегатом (с. 443)
Замена условной инструкции полиморфизмом (с. 317)
Замена функции командой (с. 381)
Замена цикла конвейером (с. 278)
Извлечение класса (с. 229)
Извлечение переменной (с. 165)
Извлечение суперкласса (с. 418)
Извлечение функции (с. 152)
Изменение объявления функции (с. 170)
Инкапсуляция записи (с. 208)
Инкапсуляция коллекции (с. 216)
Инкапсуляция переменной (с. 178)
Объединение условного выражения (с. 309)
Объединение функций в класс (с. 190)
Объединение функций в преобразование (с. 195)
Опускание метода (с. 403)
Опускание поля (с. 404)
Отделение запроса от модификатора (с. 352)
Параметризация функции (с. 355)
Переименование переменной (с. 183)
Переименование поля (с. 289)
Переименование функции (с. 170)
Перемещение инструкций (с. 269)
Перенос инструкций в точку вызова (с. 262)
Перенос инструкций в функцию (с. 258)
Перенос поля (с. 253)
Перенос функции (с. 244)
Подстановка алгоритма (с. 240)
Подъем метода (с. 394)
Подъем поля (с. 397)
Подъем тела конструктора (с. 399)
Посредник (с. 124)
Разделение цикла (с. 274)
Разделение этапа (с. 201)
Расщепление переменной (с. 285)
Рефакторинг и производительность (с. 103)
Свертывание иерархии (с. 423)
Сокрытие делегата (с. 235)
Сохранение всего объекта (с. 364)
Удаление аргумента-флага (с. 359)
Удаление метода установки значения (с. 376)
Удаление неработающего кода (с. 283)
Удаление подкласса (с. 413)
Удаление посредника (с. 238)
Рефакторинг
кода на JavaScript
Улучшение проекта существующего кода
Refactoring
Improving the Design ofExisting Code

Martin Fowler
with contributions by Kent Beck


▼▼ Addison-Wesley
Boston • Columbus • New York • San Francisco • Amsterdam • Cape Town
Dubai • London • Madrid • Milan • Munich • Paris • Montreal • Toronto • Delhi • Mexico City
S&O Paulo • Sydney • Hong Kong • Seoul • Singapore • Taipei • Tokyo
Рефакторинг
кода на JavaScript
Улучшение проекта существующего кода

Мартин Фаулер
при участии Кента Бека

Москва • Санкт-Петербург
2019
ББК 32. 973. 26-018. 2. 75
Ф28
УДК 681. 3. 07
ООО “Диалектика”
Зав. редакцией С. Н. Тригуб
Перевод с английского и редакция канд. техн, наук И. В. Красикова
По общим вопросам обращайтесь в издательство “Диалектика” по адресу:
info@dialektika. com, http://www. dialektika. com

Фаулер, Мартин.
Ф28 Рефакторинг кода на JavaScript: улучшение проекта существующего кода, 2-е изд. :
Пер. с англ. — СПб. : ООО “Диалектика”, 2019. — 464 с. : ил. — Парал. тит. англ.
ISBN 978-5-907144-59-0 (рус. )
ББК 32. 973. 26-018. 2.

Все названия программных продуктов являются зарегистрированными торговыми марками соответ­
ствующих фирм.
Никакая часть настоящего издания ни в каких целях не может быть воспроизведена в какой бы то ни
было форме и какими бы то ни было средствами, будь то электронные или механические, включая фотоко­
пирование и запись на магнитный носитель, если на это нет письменного разрешения издательства Addison-
Wesley Publishing Company, Inc.

Отпечатано в АО “Первая Образцовая типография”
Филиал “Чеховский Печатный Двор”
142300, Московская область, г. Чехов, ул. Полиграфистов, д. 1
Сайт: www. chpd. ru, E-mail: sales@chpd. ru, тел. 8 (499) 270-73-59

Глава 1. Первый пример рефакторинга 29

Глава 2. Принципы рефакторинга 79

Глава 3. Запах в коде 111

Глава 4. Создание тестов 129

Глава 5. На пути к каталогу рефакторингов 147

Глава 6. Первое множество рефакторингов 151

Глава 7. Инкапсуляция 207

Глава 8. Перенос функциональности 243

Глава 9. Организация данных 285

Глава 10. Упрощение условной логики 305

Глава 11. Рефакторинг API 351

Глава 12. Работа с наследованием 393

Предметный указатель 453
Содержание
Предисловие к первому изданию 19
Введение 21
Что такое рефакторинг 22
О чем эта книга 23
Примеры кода на JavaScript 24
На кого рассчитана эта книга 24
На плечах других 26
Благодарности 26
Ждем ваших отзывов! 28
Глава 1. Первый пример рефакторинга 29
Начальная точка 30
Комментарии к программе 32
Первый шаг 34
Декомпозиция функции statement 35
Устранение переменной play 40
Извлечение бонусов 44
Удаление переменной format 46
Удаление переменной volumeCredits 49
Состояние: множество вложенных функций 53
Разделение вычисления и форматирования 55
Состояние: разделение на два файла (и этапы) 63
Реорганизация вычислений в соответствии с типом постановки 66
Создание калькулятора представлений 68
Перемещение функций в калькулятор 69
Превращение калькулятора представлений в полиморфный 71
Состояние: создание данных с помощью калькулятора представлений 73
Заключительные замечания 76
Глава 2. Принципы рефакторинга 79
Определение рефакторинга 79
Две шляпы 81
Почему нужно заниматься рефакторингом 81
Рефакторинг совершенствует проектирование
программного обеспечения 81
Рефакторинг упрощает понимание программ 82
Рефакторинг помогает находить ошибки 83
Рефакторинг ускоряет написание программ 83
Когда нужно выполнять рефакторинг 85
Подготовительный рефакторинг — упрощение добавления
функциональной возможности 86
Осмыслительный рефакторинг — упрощение понимания кода 86
Убирающий рефакторинг 87
Запланированный и спонтанный рефакторинги 88
Долгосрочный рефакторинг 89
Рефакторинг в ходе анализа кода 90
Что мне сказать руководству? 91
Когда не следует прибегать к рефакторингу 91
Проблемы при рефакторинге 92
Замедление внедрения новых возможностей 92
Владение кодом 93
Ветви 94
Тестирование 96
Устаревший код 97
Базы данных 98
Рефакторинг и архитектура 99
Рефакторинг и процесс разработки программного обеспечения 101
Рефакторинг и производительность 103
Истоки рефакторинга 106
Автоматизированные рефакторинги 107
Что дальше 110
Глава 3. Запахи в коде 111
Таинственное имя 112
Дублируемый код 112
Длинная функция 113
Длинный список параметров 114
Глобальные данные 115
Изменяемые данные 116
Расходящиеся изменения 117
Стрельба дробью 118
Завистливые функции 118
Группы данных 119
Одержимость примитивами 120
Повторяющиеся switch 121
Циклы 121
Ленивый элемент 122
Теоретическая общность 122
Временное поле 123
Цепочки сообщений 123
Посредник 124
Внутренний обмен 124
Большой класс 125
Альтернативные классы с разными интерфейсами 125
Классы данных 126
Отказ от наследства 126
Комментарии 127
Глава 4. Создание тестов 129
Важность самотестируемого кода 129
Пример кода для тестирования 132
Первый тест 135
Добавление другого теста 138
Изменение прибора тестирования 140
Проверка границ 141
И многое другое. 144
Глава 5. На пути к каталогу рефакторингов 147
Формат описания рефакторинга 147
Выбор рефакторинга 149
Глава 6. Первое множество рефакторингов 151
Извлечение функции (Extract Function) 152
Мотивация 152
Техника 154
Пример: переменных вне области видимости нет 155
Пример: использование локальных переменных 157
Пример: присваивание локальной переменной 159
Встраивание функции (Inline Function) 161
Мотивация 162
Техника 163
Пример 163
Извлечение переменной (Extract Variable) 165
Мотивация 165
Техника 166
Пример 166
Пример с классом 168
Встраивание переменной (Inline Variable) 169
Мотивация 169
Техника 169
Изменение объявления функции (Change Function Declaration) 170
Мотивация 171
Техника 172
Пример: переименование функции (простая техника) 173
Пример: переименование функции (техника миграции) 174
Пример: добавление параметра 175
Пример: замена параметра одним из его свойств 176
Инкапсуляция переменной (Encapsulate Variable) 178
Мотивация 179
Техника 180
Пример 180
Переименование переменной (Rename Variable) 183
Мотивация 184
Техника 184
Пример 184
Введение объекта параметра (Introduce Parameter Object) 186
Мотивация 186
Техника 187
Пример 187
Объединение функций в класс (Combine Functions into Class) 190
Мотивация 190
Техника 191
Пример 192
Объединение функций в преобразование
(Combine Functions into Transform) 195
Мотивация 195
Техника 196
Пример 197
Разделение этапа (Split Phase) 201
Мотивация 201
Техника 202
Пример 203
Глава 7. Инкапсуляция 207
Инкапсуляция записи (Encapsulate Record) 208
Мотивация 208
Техника 209
Пример 210
Пример: инкапсуляция вложенной записи 212
Инкапсуляция коллекции (Encapsulate Collection) 216
Мотивация 217
Техника 218
Пример 219
Замена примитива объектом (Replace Primitive with Object) 221
Мотивация 221
Техника 222
Пример 222
Замена временной переменной запросом (Replace Temp with Query) 225
Мотивация 225
Техника 226
Пример 227
Извлечение класса (Extract Class) 229
Мотивация 229
Техника 230
Пример 230
Встраивание класса (Inline Class) 232
Мотивация 233
Техника 233
Пример 233
Сокрытие делегата (Hide Delegate) 235
Мотивация 236
Техника 236
Пример 237
Удаление посредника (Remove Middle Man) 238
Мотивация 238
Техника 239
Пример 239
Подстановка алгоритма (Substitute Algorithm) 240
Мотивация 241
Техника 241
Глава 8. Перенос функциональности 243
Перенос функции (Move Function) 244
Мотивация 244
Техника 245
Пример: перенос вложенной функции на верхний уровень 246
Пример: перенос между классами 250
Перенос поля (Move Field) 253
Мотивация 253
Техника 254
Пример 255
Пример: перенос в совместно используемый объект 257
Перенос инструкций в функцию (Move Statements into Function) 258
Мотивация 259
Техника 259
Пример 260
Перенос инструкций в точку вызова (Move Statements to Callers) 262
Мотивация 263
Техника 264
Пример 264
Замена встроенного кода вызовом функции (Replace Inline Code with
Function Call) 268
Мотивация 268
Техника 269
Перемещение инструкций (Slide Statements) 269
Мотивация 269
Техника 270
Пример 271
Пример: перемещение с условными конструкциями 273
Дальнейшее чтение 274
Разделение цикла (Split Loop) 274
Мотивация 275
Техника 276
Пример 276
Замена цикла конвейером (Replace Loop with Pipeline) 278
Мотивация 278
Техника 279
Пример 279
Дальнейшее чтение 283
Удаление неработающего кода (Remove Dead Code) 283
Мотивация 283
Техника 284
Глава 9. Организация данных 285
Расщепление переменной (Split Variable) 285
Мотивация 286
Техника 286
Пример 286
Пример: присваивание входному параметру 288
Переименование поля (Rename Field) 289
Мотивация 289
Техника 290
Пример: переименование поля 290
Замена вычисленной переменной запросом
(Replace Derived Variable with Query) 293
Мотивация 293
Техника 294
Пример 294
Пример: несколько источников 295
Замена ссылки значением (Change Reference to Value) 296
Мотивация 297
Техника 297
Пример 298
Замена значения ссылкой (Change Value to Reference) 300
Мотивация 300
Техника 301
Пример 301
Глава 10. Упрощение условной логики 305
Декомпозиция условной инструкции (Decompose Conditional) 306
Мотивация 306
Техника 307
Пример 307
Объединение условного выражения (Consolidate Conditional Expression) 309
Мотивация 309
Техника 310
Пример 310
Пример: использование операторов И 311
Замена вложенных условных конструкций граничным оператором
(Replace Nested Conditional with Guard Clauses) 312
Мотивация 313
Техника 313
Пример 314
Пример: обращение условий 315
Замена условной инструкции полиморфизмом
(Replace Conditional with Polymorphism) 317
Мотивация 318
Техника 319
Пример 319
Пример: использование полиморфизма для вариативного поведения 324
Введение частного случая (Introduce Special Case) 334
Мотивация 334
Техника 335
Пример 335
Пример: использование литерала объекта 340
Пример: использование преобразования 343
Введение утверждения (Introduce Assertion) 346
Мотивация 347
Техника 347
Пример 348
Глава 11. Рефакторинг API 351
Отделение запроса от модификатора (Separate Query from Modifier) 352
Мотивация 352
Техника 353
Пример 353
Параметризация функции (Parameterize Function) 355
Мотивация 356
Техника 356
Пример 356
Удаление аргумента-флага (Remove Flag Argument) 359
Мотивация 359
Техника 361
Пример 361
Сохранение всего объекта (Preserve Whole Object) 364
Мотивация 364
Техника 365
Пример 366
Пример: вариация для создания новой функции 367
Замена параметра запросом (Replace Parameter with Query) 369
Мотивация 369
Техника 370
Пример 370
Замена запроса параметром (Replace Query with Parameter) 372
Мотивация 372
Техника 373
Пример 374
Удаление метода установки значения (Remove Setting Method) 376
Мотивация 376
Техника 377
Пример 378
Замена конструктора фабричной функцией (Replace Constructor with Factory
Function) 379
Мотивация 379
Техника 379
Пример 380
Замена функции командой (Replace Function with Command) 381
Мотивация 382
Техника 383
Пример 383
Замена команды функцией (Replace Command with Function) 388
Мотивация 389
Техника 389
Пример 390
Глава 12. Работа с наследованием 393
Подъем метода (Pull Up Method) 394
Мотивация 394
Техника 395
Пример 396
Подъем поля (Pull Up Field) 397
Мотивация 398
Техника 398
Подъем тела конструктора (Pull Up Constructor Body) 399
Мотивация 400
Техника 400
Пример 400
Опускание метода (Push Down Method) 403
Мотивация 403
Техника 404
Опускание поля (Push Down Field) 404
Мотивация 405
Техника 405
Замена кода типа подклассами (Replace Type Code with Subclasses) 405
Мотивация 406
Техника 407
Пример 407
Пример: использование косвенного наследования 410
Удаление подкласса (Remove Subclass) 413
Мотивация 413
Техника 414
Пример 414
Извлечение суперкласса (Extract Superclass) 418
Мотивация 419
Техника 420
Пример 420
Свертывание иерархии (Collapse Hierarchy) 423
Мотивация 423
Техника 424
Замена подкласса делегатом (Replace Subclass with Delegate) 424
Мотивация 425
Техника 426
Пример 427
Пример: замена иерархии 433
Замена суперкласса делегатом(Replace Superclass with Delegate) 443
Мотивация 443
Техника 445
Пример 445
Библиография 449
Предметный указатель 453
Посвящается Синди
— Мартин
Предисловие
к первому изданию
Понятие рефакторинга возникло в кругах, близких к Smalltalk, но очень бы­
стро проложило дорогу к другим языкам программирования. Поскольку оптими­
зация является неотъемлемой частью развития программного обеспечения, этот
термин появляется, как только проектировщики начинают вести профессиональ­
ные беседы. Он используется и когда речь идет об уточнении иерархии классов,
и когда обсуждается, сколько строк кода можно удалить. Программисты знают,
что с первого раза хорошо работающую программу не получить — она должна
развиваться постепенно, по мере накопления опыта. Они также знают, что код
будет куда чаще читаться и изменяться, чем писаться “с нуля”. Рефакторинг явля­
ется ключом к поддержке удобочитаемости и изменяемости кода — как для всего
программного обеспечения в целом, так и для конкретных программ.
В чем же заключается проблема? Ответ прост: рефакторинг — это риск. Он
требует изменения рабочего кода, в ходе которого могут возникнуть не только
улучшения, но и новые ошибки. Небрежно выполненный рефакторинг может
отбросить вас назад на дни и даже недели. Еще более рискованным оказывается
рефакторинг, выполняемый неофициально или от случая к случаю. Вы начинае­
те копаться в коде. Вскоре вы обнаруживаете новые возможности для внесения
изменений и закапываетесь глубже. Чем глубже вы копаете, тем больше возмож­
ностей для изменений обнаруживаете. В конце концов вы выкапываете яму, из
которой уже не в состоянии выбраться. Чтобы эта яма не превратилась в могилу,
рефакторинг необходимо выполнять систематически. Когда я со своими соавто­
рами написал книгу “Design Patterns”1, в ней было упомянуто, что проектные ша­
блоны обеспечивают цели для рефакторинга. Однако определение цели является
лишь частью проблемы; другой задачей является преобразование кода, позволя­
ющее достичь поставленной цели.
Мартин Фаулер (Martin Fowler) и его соавторы внесли неоценимый вклад в
развитие объектно-ориентированного программного обеспечения, пролив свет
на процесс рефакторинга. В этой книге описаны принципы и передовой опыт
рефакторинга и указано, когда и где следует начинать работу с кодом для его

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *