refaktoryzacja do wzorców projektowych helion.pdf

(6132 KB) Pobierz
887635664.004.png
6
SPIS TREŚCI
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
887635664.005.png 887635664.006.png
 
7
SPIS TREŚCI
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
887635664.001.png
 
8
SPIS TREŚCI
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
887635664.002.png
 
9
SPIS TREŚCI
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
887635664.003.png
 
Zgłoś jeśli naruszono regulamin