Zmodernizuj kod swoich aplikacji
pod kątem stosowania wzorców projektowych
- Dowiedz się, czym jest refaktoryzacja
- Poznaj zasady stosowania wzorców projektowych
- Wprowadź wzorce projektowe do kodu źródłowego aplikacji
Refaktoryzacja to zmiana konstrukcji kodu bez modyfikowania jego działania. Najczęstszym powodem refaktoryzowania kodu jest konieczność jego "uporządkowania" lub usunięcia z niego funkcji niewykorzystywanych w projekcie. Często również stosuje się refaktoryzację, aby zmodernizować kod pod kątem zastosowania w nim wzorców projektowych. Wprowadzenie wzorców projektowych do kodu znacznie ułatwia jego późniejsze modyfikacje i ewentualne rozbudowy. Stosowanie technik programowania ekstremalnego nierozerwalnie wiąże ze sobą wzorce projektowe i refaktoryzację kodu.
Książka "Refaktoryzacja do wzorców projektowych" opisuje teoretyczne i praktyczne zagadnienia związane z refaktoryzowaniem kodu pod kątem wzorców projektowych. Przedstawia opisy niskopoziomowych przekształceń, które umożliwiają programiście bezpieczną zmianę konstrukcji kodu prowadzącą do zaimplementowania bądź usunięcia określonych wzorców z programu. Zawiera również szczegółowy opis łączenia tych przekształceń w procesie refaktoryzacji oraz sposobów implementowania wzorców w kodzie. Każde z omówionych w książce przekształceń zostało zilustrowane praktycznymi przykładami.
- Podstawowe zasady refaktoryzacji
- Zasady stosowania wzorców projektowych
- Najczęstsze powody wprowadzania wzorców do kodu
- Implementowanie wzorców projektowych
- Zmiany sposobów tworzenia obiektów
- Upraszczanie i uogólnianie kodu
Jeśli chcesz zmodernizować kod swoich aplikacji,
w tej książce znajdziesz wszystkie informacje na ten temat.
Spis treści
Przedmowa Ralpha Johnsona (11)
Przedmowa Martina Fowlera (13)
Wstęp (15)
- O czym jest ta książka? (15)
- Jaki jest cel tej książki? (15)
- Dla kogo jest ta książka? (16)
- Co trzeba wiedzieć? (16)
- Jak korzystać z tej książki? (17)
- Historia tej książki (17)
- Na ramionach gigantów (18)
- Podziękowania (18)
1. Dlaczego napisałem tę książkę (21)
- Planowanie na wyrost (21)
- Wzorce jako panaceum (22)
- Brak właściwego planowania (23)
- Programowanie sterowane testami i ciągła refaktoryzacja (24)
- Refaktoryzacja i wzorce (25)
- Projektowanie jako proces ewolucyjny (26)
2. Refaktoryzacja (27)
- Czym jest refaktoryzacja? (27)
- Dlaczego refaktoryzujemy? (28)
- Co dwie głowy... (29)
- Kod czytelny dla człowieka (29)
- Porządek (30)
- Zasada małych kroków (31)
- Dług konstrukcyjny (32)
- Rozwijanie architektury (33)
- Przekształcenia złożone i oparte na testach (33)
- Zalety przekształceń złożonych (34)
- Narzędzia do refaktoryzacji (35)
3. Wzorce (37)
- Czym jest wzorzec projektowy? (37)
- Fan wzorców (38)
- Jest wiele sposobów implementowania każdego wzorca (40)
- Zmiana "do", "w stronę" i "od" wzorca (42)
- Czy wzorce zwiększają złożoność kodu? (43)
- Znajomość wzorców (44)
- Rozpoczynanie pracy od pełnego projektu (45)
4. Zapachy kodu (47)
- Duplicated Code (powtórzenia kodu) (48)
- Long Method (długa metoda) (49)
- Conditional Complexity (złożoność warunków) (50)
- Primitive Obsession (pierwotna obsesja) (50)
- Indecent Exposure (nieprzyzwoite obnażanie się) (51)
- Solution Sprawl (rozrzucanie rozwiązania) (51)
- Alternative Class with Different Interfaces (podobna klasa o innych interfejsach) (51)
- Lazy Class (leniwa klasa) (52)
- Large Class (duża klasa) (52)
- Switch Statements (instrukcje switch) (52)
- Combinatorial Explosion (eksplozja kombinatoryczna) (52)
- Oddball Solution (osobliwe rozwiązanie) (53)
5. Katalog refaktoryzacji ukierunkowanych na wzorce (55)
- Format opisu przekształceń (55)
- Przykłady (56)
- Obsługa XML (57)
- HTML Parser (57)
- Kalkulator ryzyka kredytu (58)
- Punkt wyjścia (58)
- Jak wykorzystać tę książkę do nauki (58)
6. Tworzenie obiektów (61)
- Replace Constructors with Creation Methods (zastąp konstruktory metodami tworzącymi egzemplarze) (62)
- Motywacja (62)
- Mechanika (64)
- Przykład (64)
- Odmiany (69)
- Move Creation Knowledge to Factory (przenieś operację tworzenia obiektów do fabryki) (71)
- Motywacja (73)
- Mechanika (75)
- Przykład (75)
- Encapsulate Classes with Factory (zahermetyzuj klasy, wprowadzając fabrykę) (81)
- Motywacja (82)
- Mechanika (82)
- Przykład (83)
- Odmiany (86)
- Introduce Polymorphic Creation with Factory Method (wprowadź polimorficzne tworzenie obiektów - wzorzec Factory Method) (88)
- Motywacja (89)
- Mechanika (90)
- Przykład (91)
- Encapsulate Composite with Builder (użyj klasy Builder do hermetyzacji obiektów Composite) (95)
- Mechanika (97)
- Przykład (98)
- Odmiany (108)
- Inline Singleton (wstaw kod klasy Singleton w miejscu wywołania) (111)
- Motywacja (111)
- Mechanika (114)
- Przykład (114)
7. Upraszczanie kodu (117)
- Compose Method (zbuduj metodę z kilku elementów) (118)
- Motywacja (118)
- Mechanika (120)
- Przykład (120)
- Replace Conditional Logic with Strategy (zastąp wyrażenia warunkowe wzorcem Strategy) (123)
- Motywacja (123)
- Mechanika (125)
- Przykład (126)
- Move Embellishment to Decorator (przenieś upiększenia do klasy Decorator) (136)
- Motywacja (136)
- Mechanika (139)
- Przykład (140)
- Replace State-Altering Conditionals with State (zastąp wyrażenia warunkowe zmiany stanu klasami State) (154)
- Motywacja (155)
- Mechanika (156)
- Przykład (156)
- Replace Implicit Tree with Composite (zastąp niejawne drzewo strukturą Composite) (165)
- Motywacja (165)
- Mechanika (168)
- Przykład (169)
- Replace Conditional Dispatcher with Command (zastąp dyspozycje oparte na warunkach obiektami Command) (177)
- Motywacja (177)
- Mechanika (179)
- Przykład (180)
8. Uogólnianie kodu (187)
- Form Template Method (utwórz metodę szablonową) (188)
- Motywacja (189)
- Mechanika (190)
- Przykład (190)
- Extract Composite (wyodrębnij kompozyt) (195)
- Motywacja (195)
- Mechanika (196)
- Przykład (197)
- Replace One/Many Distinctions with Composite (zastąp zróżnicowanie jeden-wiele wzorcem Composite) (203)
- Motywacja (203)
- Mechanika (205)
- Przykład (206)
- Replace Hard-Coded Notifications with Observer (zastąp powiadomienia zapisane w kodzie wzorcem Observer) (214)
- Motywacja (214)
- Mechanika (216)
- Przykład (217)
- Unify Interfaces with Adapter (zunifikuj interfejsy, wprowadzając adapter) (223)
- Motywacja (224)
- Mechanika (224)
- Przykład (226)
- Extract Adapter (wyodrębnij adapter) (233)
- Motywacja (234)
- Mechanika (235)
- Przykład (236)
- Odmiany (242)
- Replace Implicit Language with Interpreter (zastąp niejawny język interpreterem) (243)
- Motywacja (244)
- Mechanika (245)
- Przykład (246)
9. Ochrona (257)
- Replace Type Code with Class (zastąp kod typu klasą) (258)
- Motywacja (258)
- Mechanika (260)
- Przykład (261)
- Limit Instantiation with Singleton (ogranicz tworzenie egzemplarzy, stosując singleton) (267)
- Motywacja (267)
- Mechanika (268)
- Przykład (269)
- Introduce Null Object (wprowadź obiekt pusty) (271)
- Motywacja (271)
- Mechanika (273)
- Przykład (274)
10. Akumulacja (279)
- Move Accumulation to Collecting Parameter (przenieś operacje gromadzenia danych do parametru zbierającego) (280)
- Motywacja (280)
- Mechanika (281)
- Przykład (282)
- Move Accumulation to Visitor (przenieś operacje gromadzenia danych do inspektora) (286)
- Motywacja (287)
- Mechanika (290)
- Przykład (294)
11. Narzędzia (301)
- Chain Constructors (połącz konstruktory w łańcuch) (302)
- Motywacja (303)
- Mechanika (303)
- Przykład (303)
- Unify Interfaces (zunifikuj interfejsy) (305)
- Motywacja (305)
- Mechanika (306)
- Przykład (306)
- Extract Parameter (wyodrębnij parametr) (307)
- Motywacja (307)
- Mechanika (308)
- Przykład (308)
Posłowie (311)
Bibliografia (313)
Skorowidz (315)