Рефакторинг. Поліпшення існуючого коду 2579

Паперова книга
2579
Рефакторинг. Поліпшення існуючого коду - фото 1
1'100
39 людей

Все про “Рефакторинг. Поліпшення існуючого коду”

Від видавця

До того часу як об'єктна технологія - зокрема мова Java - стала звичайною справою, з'явилася велика кількість погано спроектованих, неефективних і малопридатних до супроводу і розширенню додатків. Професійні розробники програмних систем все ясніше бачать, наскільки важко мати справу з таким "неоптимальним" спадщиною. Вже кілька років експерти в області об'єктного програмування застосовують розширюється набір прийомів, покликаних поліпшити структурну цілісність і продуктивність таких програм. Цей підхід, званий рефакторінгом, до цього моменту залишався територією експертів, оскільки не робилося спроб перевести професійні знання у форму, доступну всім розробникам.

 У цій книзі Мартін Фаулер показує, як розробники програмного забезпечення можуть реалізувати істотні вигоди цієї нової технології, де зазвичай лежать можливості зміни структури і як приступити до переробки поганого проекту в хороший. Кожен крок рефакторінгу простий - на перший погляд дуже простий, щоб зробити його. Це може бути переміщення поля з одного класу в інший, винесення якогось коду методу і перетворення його в самостійний метод або навіть переміщення коду по ієрархії класів. Кожен окремий крок може здатися елементарним, але сукупний ефект таких малих змін у стані радикально поліпшити проект. Рефакторинг є вірним способом запобігання розпаду програми. 

Крім опису різних прийомів автор надає детальний каталог, що включає більше сімдесяти рефакторингов, а також корисні вказівки по їх застосуванню, покрокові інструкції і практичні приклади. Приклади написані на Java, але ідеї застосовні до будь об'єктно-орієнтованою мовою програмування.


Полистать

 

Зміст

Зміст
 
Передмова
 
1. Рефакторинг, перший приклад 
Вихідна програма
Перший крок рефакторінгу
Декомпозиція і перерозподіл методу statement
Заміна умовної логіки на поліморфізм
Прикінцеві роздуми
 
2. Принципи рефакторінгу 
Визначення рефакторінгу
Навіщо потрібно проводити рефакторинг?
Коли слід проводити рефакторинг?
Як пояснити це своєму керівникові?
Проблеми, що виникають при проведенні рефакторінгу
Рефакторинг і проектування
Рефакторинг і продуктивність
Які витоки рефакторінгу?
 
3. Код з душком 
Дублювання коду
Довгий метод
Великий клас
Довгий список параметрів
Розбіжні модифікації
"Стрільба дробом"
Заздрісні функції
Групи даних
Одержимість елементарними типами
Оператори типу switch
Паралельні ієрархії спадкування
Ледачий клас
Теоретична спільність
Тимчасове поле
Ланцюжка повідомлень
Посередник
Недоречна близькість
Альтернативні класи з різними інтерфейсами
Неповнота бібліотечного класу
Класи даних
Відмова від спадщини
Коментарі
 
4. Розробка тестів 
Цінність самотестирующегося коду
Середовище тестування JUnit
Додавання нових тестів
 
5. На шляху до каталогу методів рефакторінгу
Формат методів рефакторінгу
Пошук посилань
Наскільки зрілими є пропоновані методи 
рефакторінгу?
 
6. Складання методів 
Виділення методу (Extract Method)
Вбудовування методу (Inline Method)
Вбудовування тимчасової змінної (Inline Temp)
Заміна тимчасової змінної викликом методу 
(Replace Temp with Query)
Введення пояснювальної змінної (Introduce Explaining 
Variable)
Розщеплення тимчасової змінної (Split Temporary Variable)
Видалення присвоювань параметрами (Remove Assignments 
to Parameters)
Заміна методу об'єктом методів (Replace Method with Method Object)
Заміщення алгоритму (Substitute Algorithm)
 
7. Переміщення функцій між об'єктами
Переміщення методу (Move Method)
Переміщення поля (Move Field)
Виділення класу (Extract Class)
Вбудовування класу (Inline Class)
Приховування делегування (Hide Delegate)
Видалення посередника (Remove Middle Man)
Введення зовнішнього методу (Introduce Foreign Method)
Введення локального розширення (Introduce Local Extension)
 
8. Організація даних
Самоинкапсуляция поля (Self Encapsulate Field)
Заміна значення даних об'єктом (Replace Data Value 
with Object)
Заміна значення посиланням (Change Value to Reference)
Заміна посилання значенням (Change Reference to Value)
Заміна масиву об'єктом (Replace Array Object with)
Дублювання видимих даних (Duplicate Observed Data)
Заміна одностороннього зв'язку двобічної 
(Change Unidirectional Association to Bidirectional)
Заміна двобічної зв'язку односпрямованої 
(Change Bidirectional Association to Unidirectional)
Заміна магічного числа символічної константою 
(Replace Magic Number with Symbolic Constant)
Інкапсуляція поля (Encapsulate Field)
Інкапсуляція колекції (Encapsulate Collection)
Заміна запису класом даних (Replace Record with Data Class)
Заміна коду типу класом (Replace Type Code with Class)
Заміна коду типу підкласами (Replace Type Code with Subclasses)
Заміна коду типу станом/стратегією (Replace Type Code 
with State/Strategy)
Заміна підкласу полями (Replace Subclass with Fields)
 
9. Спрощення умовних виразів 
Декомпозиція умовного оператора (Decompose Conditional)
Консолідація умовного виразу (Консолідація Conditional 
Expression)
Консолідація дубльованих умовних фрагментів 
(Консолідація Duplicate Conditional Fragments)
Видалення керуючого прапора (Remove Control Flag)
Заміна вкладених умовних операторів граничним 
оператором (Replace Nested Conditional Guard with Clauses)
Заміна умовного оператора поліморфізмом (Replace Conditional with Polymorphіsm)
Введення об'єкта Null (Introduce Null Object)
Вступ затвердження (Introduce Assertion)
 
10. Спрощення викликів методів 
Перейменування методу (Rename Method)
Додавання параметра (Add Parameter)
Видалення параметра (Remove Parameter)
Поділ запиту і модифікатора (Separate Query from Modifier)
Параметризація методу (Parameterize Method)
Заміна параметра явними методами (Replace Parameter 
with Explicit Methods)
Збереження всього об'єкта (Preserve Whole Object)
Заміна параметра викликом методу (Replace Parameter with Method)
Введення граничного об'єкта (Introduce Object Parameter)
Видалення методу встановлення значення (Remove Setting Method)
Приховування методу (Hide Method)
Заміна конструктора фабричним методом (Replace Constructor 
with Factory Method)
Інкапсуляція спадного перетворення типу 
(Encapsulate Downcast)
Заміна коду помилки винятковою ситуацією (Replace 
Error Code with Exception)
Заміна виняткової ситуації перевіркою (Replace 
Exception with Test)
 
11. Рішення задач узагальнення 
Підйом поля (Pull Up Field)
Підйом методу (Pull Up Method)
Підйом тіла конструктора (Pull Up Constructor Body)
Спуск методу (Push-Down Method)
Спуск поля (Push-Down Field)
Виділення підкласу (Extract Subclass)
Виділення батьківського класу (Extract Superclass)
Виділення інтерфейсу (Extract Interface)
Згортання ієрархії (Collapse Hierarchy)
Формування шаблону методу (Form Template Method)
Заміна спадкування делегуванням (Replace Inheritance 
with Delegation)
Заміна делегування успадкуванням (Replace Delegation 
with Inheritance)
 
12. Великі рефакторинги 
Поділ спадкування (Tease Apart Inheritance)
Перетворення процедурного проекту в об'єкти 
(Convert Procedural Design to Objects)
Відділення предметної області від подання (Separate Domain from Presentation)
Виділення ієрархії (Extract Hierarchy)
 
13. Рефакторинг, повторне використання і реальність
Перевірка в реальних умовах
Чому розробники не хочуть застосовувати рефакторинг 
до своїх програм?
Возращаясь до перевірки в реальних умовах
Ресурси та посилання, що відносяться до рефакторінгу
Наслідки повторного використання програмного 
забезпечення і передачі технологій
Завершальне зауваження
Бібліографія
 
14. Інструментальні засоби проведення рефакторінгу 
Рефакторинг з використанням інструментальних засобів
Технічні критерії для інструментів проведення рефакторінгу
Практичні критерії для інструментів рефакторінгу
Короткий висновок
 
15. Складаючи всі разом 
 
Бібліографія
Список приміток
Алфавітний покажчик

Анотація

Рефакторинг. Поліпшення існуючого коду

Рецензії

0

Всі характеристики

Товар входить до категорії

  • Самовивіз з відділень поштових операторів від 45 ₴ - 80 ₴
  • Доставка поштовими сервісами - тарифи перевізника
Схожі товари
Cloud Native Security Cookbook. Recipes for a Secure Cloud
197753
Josh Armitage
2'100 ₴
Azure Kubernetes Services with Microservices. 1st Ed.
244662
Kasam Ahmed Shaikh, Shailesh S. Agaskar
2'100 ₴
Learning Domain-Driven Design. Aligning Software Architecture and Business Strategy. 1st Ed.
244763
Vlad Khononov
2'100 ₴
Learning Serverless: Design, Develop, and Deploy with Confidence. 1st Ed.
244768
Jason Katzer
2'200 ₴
Spring Boot: Up and Running. Building Cloud Native Java and Kotlin Applications. 1st Ed.
244791
Mark Heckler
2'300 ₴
Docker: Practical Guide for Developers and Devops Teams
263487
Bernd OgglMichael Kofler
2'400 ₴
Mastering Apache Pulsar: Cloud Native Event Streaming at Scale. 1st Ed.
244772
Jowanza Joseph
2'600 ₴
Practical Process Automation. Orchestration and Integration in Microservices and Cloud Native Architectures
153396
Bernd Ruecker
3'000 ₴