Refaktoryzacja. Ulepszanie struktury istniejącego kodu. Wydanie II - ebook
Refaktoryzacja. Ulepszanie struktury istniejącego kodu. Wydanie II - ebook
Refaktoryzacja ma na celu ulepszanie istniejącego kodu. Poprawia jego strukturę, czytelność i wydajność. Prowadzona poprawnie, cechuje się zdyscyplinowaniem metody, systematycznością i konsekwencją w działaniu, a także ciągłym minimalizowaniem ryzyka wprowadzenia błędów. Niemniej refaktoryzacja jest ryzykowna. Polega na wprowadzaniu zmian do działającego kodu, co może doprowadzić do powstania trudno wykrywalnych błędów. Ryzyko wzrasta, jeśli refaktoryzacja jest przeprowadzana w sposób nieprzemyślany. Okazuje się, że transformacja kodu, która ma doprowadzić do jego ulepszenia, to spore wyzwanie.
Ta książka jest zaktualizowanym wydaniem praktycznego przewodnika po refaktoryzacji. Choć jest przeznaczona dla profesjonalnego programisty, znalazło się tu zrozumiałe wprowadzenie do tego zagadnienia z opisem celów, technik i możliwości refaktoryzacji. Wspomniano także o problemach związanych z refaktoryzacją. Natomiast zasadniczą część książki stanowi znakomicie uzupełniony i wzbogacony katalog przekształceń refaktoryzacyjnych. Do zilustrowania poszczególnych technik refaktoryzacji autorzy wybrali język JavaScript, jednak kod został przedstawiony w taki sposób, aby prezentowane koncepcje bez trudu zrozumiał każdy programista.
W tej książce między innymi:
- solidne wprowadzenie do refaktoryzacji
- przekształcenia refaktoryzacyjne: zasady, sposoby, testy
- enkapsulacja w refaktoryzacji
- upraszczanie wyrażeń oraz porządkowanie danych, zmiennych i pól
- refaktoryzacja klas i API
Refaktoryzacja: czytelny kod, wydajne działanie i brak błędów!
»» Spis wszystkich odwołań do stron w książce
Spis treści
Słowo wstępne do pierwszego wydania 9
Przedmowa 11
- Czym jest refaktoryzacja? 12
- Co zawiera ta książka? 12
- Kto powinien przeczytać tę książkę? 13
- Podstawowe prace wykonane przez innych 14
- Podziękowania 15
1. Refaktoryzacja: pierwszy przykład 17
- Punkt wyjścia 17
- Uwagi na temat przykładowego programu 19
- Pierwszy krok refaktoryzacji 20
- Dekompozycja funkcji statement 21
- Aktualny stan: mnóstwo zagnieżdżonych funkcji 37
- Rozdzielenie faz obliczeń i formatowania 39
- Aktualny stan: podział na dwa pliki (i fazy) 46
- Uporządkowanie obliczeń według typów przedstawień 48
- Aktualny stan: tworzenie danych za pomocą polimorficznego kalkulatora 55
- Podsumowanie 57
2. Zasady refaktoryzacji 59
- Definicja refaktoryzacji 59
- Dwa kapelusze 60
- Po co refaktoryzować? 60
- Kiedy refaktoryzować? 63
- Problemy z refaktoryzacją 68
- Refaktoryzacja, architektura i yagni 73
- Refaktoryzacja i szerszy proces tworzenia oprogramowania 74
- Refaktoryzacja a wydajność 75
- Skąd się wzięła refaktoryzacja? 77
- Refaktoryzacja automatyczna 78
- Dalsze kroki 80
3. Brzydkie zapaszki w kodzie 81
- Tajemnicza nazwa 82
- Zduplikowany kod 82
- Długa funkcja 82
- Długa lista parametrów 83
- Dane globalne 84
- Dane mutowalne 84
- Rozbieżne zmiany 85
- Fala uderzeniowa 85
- Zazdrosne funkcjonalności 86
- Stada danych 86
- Opętanie typami prostymi 87
- Powtarzane instrukcje warunkowe 87
- Pętle 88
- Leniwa klasa 88
- Spekulacyjne uogólnienia 88
- Pole tymczasowe 89
- Łańcuchy komunikatów 89
- Pośrednik 89
- Niestosowna bliskość 90
- Duża klasa 90
- Alternatywne klasy z różnymi interfejsami 91
- Klasa danych 91
- Odmowa przyjęcia spadku 91
- Uwagi 92
4. Testy 93
- Zalety samotestującego się kodu 93
- Prosty kod do przetestowania 95
- Pierwszy test 97
- Dodanie następnego testu 100
- Modyfikacja danych początkowych 102
- Sprawdzanie warunków granicznych 102
- Dalsze kroki 105
5. Katalog przekształceń refaktoryzacyjnych 107
- Format opisu przekształceń 107
- Wybór przekształceń 108
6. Pierwszy pakiet przekształceń 109
- Ekstrakcja Funkcji 110
- Wchłonięcie Funkcji 118
- Ekstrakcja Zmiennej 122
- Wchłonięcie Zmiennej 126
- Zmiana Deklaracji Funkcji 127
- Enkapsulacja Zmiennej 134
- Zmiana Nazwy Zmiennej 139
- Wprowadzenie Obiektu Parametrycznego 142
- Zebranie Funkcji w Klasę 146
- Zebranie Funkcji w Transformatę 151
- Podział na Fazy 156
7. Enkapsulacja 161
- Enkapsulacja Rekordu 162
- Enkapsulacja Kolekcji 170
- Zastąpienie Typu Prostego Obiektem 174
- Zastąpienie Zmiennej Tymczasowej Zapytaniem 178
- Ekstrakcja Klasy 182
- Wchłonięcie Klasy 186
- Ukrycie Delegata 189
- Usunięcie Pośrednika 192
- Zastąpienie Algorytmu 195
8. Przenoszenie funkcjonalności 197
- Przeniesienie Funkcji 198
- Przeniesienie Pola 206
- Przeniesienie Instrukcji do Funkcji 211
- Przeniesienie Instrukcji do Kodu Wywołującego 215
- Zastąpienie Wchłoniętego Kodu Wywołaniem Funkcji 220
- Przesunięcie Instrukcji 221
- Podział Pętli 225
- Zastąpienie Pętli Potokiem 229
- Usunięcie Martwego Kodu 234
9. Porządkowanie danych 235
- Podział Zmiennej 236
- Zmiana Nazwy Pola 240
- Zastąpienie Wyliczanej Zmiennej Zapytaniem 244
- Zamiana Referencji na Wartość 248
- Zamiana Wartości na Referencję 252
10. Upraszczanie wyrażeń warunkowych 255
- Dekompozycja Instrukcji Warunkowej 256
- Scalenie Instrukcji Warunkowej 259
- Zastąpienie Zagnieżdżonej Instrukcji Warunkowej Instrukcją Wyjścia 262
- Zastąpienie Instrukcji Warunkowej Polimorfizmem 267
- Wprowadzenie Przypadku Specjalnego 283
- Wprowadzenie Asercji 296
11. Refaktoryzacja interfejsu API 299
- Rozdzielenie Zapytania i Modyfikacji 300
- Parametryzacja Funkcji 303
- Usunięcie Parametru-Flagi 307
- Przekazanie Całego Obiektu 312
- Zastąpienie Parametru Zapytaniem 317
- Zastąpienie Zapytania Parametrem 320
- Usunięcie Funkcji Ustawiającej Wartość 324
- Zastąpienie Konstruktora Funkcją Wytwórczą 327
- Zastąpienie Funkcji Poleceniem 330
- Zastąpienie Polecenia Funkcją 336
12. Praca z hierarchią klas 341
- Przesunięcie Metody w Górę Hierarchii 342
- Przesunięcie Pola w Górę Hierarchii 345
- Przesunięcie Ciała Konstruktora w Górę Hierarchii 347
- Przesunięcie Metody w Dół Hierarchii 351
- Przesunięcie Pola w Dół Hierarchii 352
- Zastąpienie Kodu Typu Podklasami 353
- Usunięcie Podklasy 360
- Ekstrakcja Nadklasy 366
- Zwinięcie Hierarchii 371
- Zastąpienie Podklasy Delegatem 372
- Zastąpienie Nadklasy Delegatem 390
Bibliografia 395
Skorowidz 398
Kategoria: | Programowanie |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-283-5564-4 |
Rozmiar pliku: | 4,6 MB |