Strona startowa Ludzie pragną czasami się rozstawać, żeby móc tęsknić, czekać i cieszyć się z powrotem.nabrałby podejrzeń...wzroku- Nie jestem...- Pod tę burzę powinniśmy wypić jeszcze po jednym - zaproponowałem...13 Cudowne wydarzenia w związku z umęczeniem dwóch Krzyżaków przez Litwinów są wzięte z obszernej relacji R...Skoczył naprzód, zanim autarcha zdołał odzyskać równowagę...Irytowało ją, że ten łajdak Zafir jeszcze jej nie odszukał po powrocie do Manpuru i może wcale nie być szczególnie zaintere­sowany jej odpowiedzią...niechęci pobiegł za matką po schodach...Kiedy mówiła ‼wujku” na jego twarz wypłynął najszerszy uśmiech, jaki do tej pory u niego widziałam...Przeżywałem jedno z najbardziej nieoczekiwanych rozstań w życiu...
 

Ludzie pragną czasami się rozstawać, żeby móc tęsknić, czekać i cieszyć się z powrotem.

.......................................................................................................................................306
Przykład ............................................................................................................................................306
Extract Parameter (wyodrębnij parametr) .....................................................................................................307
Motywacja ........................................................................................................................................307
Mechanika ........................................................................................................................................308
Przykład ............................................................................................................................................308
Posłowie ..............................................................................................................311
Bibliografia .........................................................................................................313
Skorowidz ...........................................................................................................315
!spis-03.doc
05-08-25
9
4Zapachy kodu
Gdy nauczysz się patrzeć na swoje słowa z krytycznym dystansem, zauważysz, że czytając ten sam fragment po pięć czy sześć razy z rzędu, za każdym razem odkrywasz nowy problem [Barzun, 229].
Refaktoryzację, a więc poprawianie konstrukcji kodu, rozpoczynamy od określenia, który kod wymaga poprawienia. Katalogi refaktoryzacji są tu pomocne, ale nie opisują wszystkich sytuacji.
Aby rozpoznać problemy we własnych rozwiązaniach, musimy zawczasu dobrze poznać typowe problemy konstrukcyjne.
Problemy konstrukcyjne mają swoje źródło w kodzie, który jest:
• wielokrotnie powtarzany,
• niejasny,
• skomplikowany.
Tak określone kryteria na pewno ułatwią wyszukiwanie miejsc, w których można wprowadzić ulepszenia. Z drugiej strony, wielu programistów uważa, że taka lista jest zbyt ogólna. Nie wiedzą, jak wykryć duplikacje w kodzie, który nie jest w oczywisty sposób identyczny. Nie są pewni, czy dany kod w jasny sposób informuje o swoim celu. Nie potrafią odróżnić kodu prostego i złożonego.
W rozdziale „Brzydkie zapachy w kodzie” książki Refactoring [F] Martin Fowler i Kent Beck dają dodatkowe wskazówki dotyczące identyfikowania problemów konstrukcyjnych. Porównują te problemy do zapachów i wyjaśniają, które przekształcenia lub połączenia przekształceń najskutecz-niej likwidują zapach.
Zapachy kodu Fowlera i Becka pojawiają się wszędzie: w metodach, klasach, hierarchiach, pakietach (przestrzeniach nazw, modułach) i całych systemach. Ich nazwy, takie jak Feature Envy (zazdrość o funkcje), Primitive Obsession (obsesja na punkcie wartości prostych albo prymitywna obsesja) czy Speculative Generality (ogólność spekulatywna), to propozycja bogatego i kolorowego słownictwa, które programiści mogą wykorzystać do sprawnej wymiany informacji o problemach konstrukcyjnych.
Uznałem, że warto rozważyć, które z 22 zapachów kodu Fowlera i Becka są związane z przekształceniami omawianymi w tej książce. W trakcie pracy zdefiniowałem pięć kolejnych, które powinny skłonić do przekształceń ukierunkowanych na wzorce. W sumie przekształcenia w tej książce powiązałem z 12 zapachami kodu.
Tabela 4.1 wymienia wszystkie 12 zapachów, wraz z przekształceniami, które mogą pomóc w ich usunięciu. Na kolejnych kilku stronach omówię każdy z zapachów i zalecane refaktoryzacje.
48
4. ZAPACHY KODU
TABELA 4.1.
Zapacha
Przekształcenie
Duplicated Code (48) [F]
Form Template Method (188)
Introduce Polymorphic Creation with Factory Method (88)
Chain Constructors (302)
Replace One/Many Distinctions with Composite (203)
Extract Composite (195)
Unify Interfaces with Adapter (223)
Introduce Null Object (271)
Long Method (49) [F]
Compose Method (118)
Move Accumulation to Collecting Parameter (280)
Replace Conditional Dispatcher with Command (177)
Move Accumulation to Visitor (286)
Replace Conditional Logic with Strategy (123)
Conditional Complexity (50)
Replace Conditional Logic with Strategy (123)
Move Embellishment to Decorator (136)
Replace State-Altering Conditionals with State (154)
Introduce Null Object (271)
Primitive Obsession (50) [F]
Replace Type Code with Class (258)
Replace State-Altering Conditionals with State (154)
Replace Conditional Logic with Strategy (123)
Replace Implicit Tree with Composite (165)
Replace Implicit Language with Interpreter (243)
Move Embellishment to Decorator (136)
Encapsulate Composite with Builder (95)
Indecent Exposure (51)
Encapsulate Classes with Factory (81)
Solution Sprawl (51)
Move Creation Knowledge to Factory (71)
Alternative Classes with Different Interfaces (51) [F] Unify Interfaces with Adapter (223) Lazy Class (52) [F]
Inline Singleton (111)
Large Class (52) [F]
Replace Conditional Dispatcher with Command (177)
Replace State-Altering Conditionals with State (154)
Replace Implicit Language with Interpreter (243)
Switch Statements (52) [F]
Replace Conditional Dispatcher with Command (177)
Move Accumulation to Visitor (286)
Combinatorial Explosion (53)
Replace Implicit Language with Interpreter (243)
Oddball Solution (45)
Unify Interfaces with Adapter (223)