Professional Documents
Culture Documents
www.devcastzone.com
Podstawowe refaktoryzacje
Refaktoryzacja kodu w jzyku PHP
www.devcastzone.com
Tred moduu
1. Przygotowanie do refaktoryzacji 2. Klasy 3. Metody
4. Wartoci i pola
5. Parametry i zmienne
copyright BNS MEDIA
Przygotowanie do refaktoryzacji
Zastosowanie frameworka do testw w celu szybkiego sprawdzenia zmian wprowadzonych w kodzie PHP np. PHPUnit i SimpleTest
Klasy
Podstawowy problem realizacja zbyt wielu funkcji przez jedn klas
Klasy
Extract Class:
o o o
Podziel funkcjonalnod na bazow i do wydzielenia Utwrz now klas Zastosuj Move Field/Method na elementach do przeniesienia (testuj po kadym przeniesieniu) W miar potrzeb, zaktualizuj interfejsy aktualnej i nowej klasy
Klasy
Extract Subclass:
o o
Stwrz now podklas dla klasy. Zmieo wywoania konstruktora tam, gdzie chcesz skorzystad z nowej klasy Jeli klasa bazowa nie jest ju uywana, zdefiniuj j jako abstrakcyjna Przesuo pola/metody za pomoc Push Down Field/Method (test po kadym przesuniciu)
Klasy
Jeli jakie pole opisuje typ obiektu, podstaw na jego miejsce akcesory zwracajce sta wartod. Wszystkie wyraenia warunkowe korzystajce z tego pola powinny zostad usunite (poniewa podklasa opisuje tylko jeden typ obiektu).
Klasy
Extract Superclass:
o
o
o
Stwrz abstrakcyjn klas i dodaj dziedziczenie po niej w istniejcych klasach Przesuo (Pull Up Field/Method) elementy do klasy bazowej Jeli metody robi to samo w inny sposb, uyj Substitute Algorithm Jeli metody robi to samo, ale maj inne nazwy, uyj Rename Method
Klasy
Extract Superclass:
o
Jeli po wydzieleniu nadal istniej podobieostwo, sprbuj uyd Extract Method + Pull Up Method (ew. Form Template Method, jeli wystpuj rnice w szczegach) Sprawd wykorzystanie klas pochodnych w kodzie; jeli s wykorzystywane jedynie mechanizmy klasy bazowej, podmieo odwoania do typw
10
Klasy
Inline Class:
o
o o o
Dodaj publiczne API klasy rdowej do klasy docelowej Podmieo odwoania do wczanej klasy w kodzie Move Field/Method na elementach klasy wczanej Jeli klasa docelowa jest jedynym klientem rdowej, uyj Hide Method na doczanych metodach Usuo istniejc klas
11
Metody
Extract Method:
o
Stwrz now metod i nazwij j zgodnie z przeznaczeniem. Skopiuj czd kodu do nowej metody. Zmienne potrzebne w starej metodzie przeka jako parametry, zmienne istniejce tylko w skopiowanym fragmencie potraktuj jako lokalne.
12
Metody
Extract Method:
o
13
Metody
o
14
Metody
o
o o
15
Metody
o
Rename Method:
Czy metoda jest implementowana przez nadklasy i podklasy? Jeli tak, wykonaj ten sam proces dla kadej z nich. Skopiuj zawartod metody do metody o nowej nazwie. Dokonaj niezbdnych modyfikacji w ciele funkcji (np. rekurencja). Zmieo ciao starej funkcji aby wywoaa now funkcj. Przetestuj.
16
Metody
o
Rename Method:
Znajd wszystkie odniesienia do starej metody i zamieo je na odniesienia do nowej. Przetestuj. Usuo star metod. Jeli stara metoda jest czci interfejsu, zostaw j na miejscu i oznacz jako przestarza. Przetestuj.
17
Metody
Hide Method:
o
Jeli dana metoda nie jest uywana poza klas, uczyo j prywatn. Przetestuj. Jeli metoda prywatna jest akcesorem, moesz j usund i zamienid wszystkie wywoania jako bezporednie odwoania do pola.
18
Wartoci i pola
Self Encapsulate Field:
o
Utwrz akcesory dla danego pola. Znajd wszystkie odniesienia do pola i zastp je za pomoc akcesorw.
19
Wartoci i pola
o
o o
20
Wartoci i pola
Replace Data Value with Object:
o
Utwrz now klas dla wartoci. Dodaj do niej prywatne pole zawierajce nasz dan oraz akcesory. Zamieo akcesory w klasie rdowej na akcesory nowej klasy. Zamieo przypisania wartoci w konstruktorze klasy bazowej na stworzenie obiektu nowego typu. Jeli takie przypisanie nie istniao, wpisz je do konstruktora.
21
Wartoci i pola
Replace Data Value with Object:
o
(Opcjonalnie) zamieo getter na metod zwracajc kopi obiektu zawartego wewntrz klasy rdowej. Przetestuj.
22
Parametry i zmienne
o
o o
23
Parametry i zmienne
Introduce Parameter Object:
o
Utwrz now klas reprezentujc cay zestaw danych. Do parametrw metody, ktr chcemy zmienid, dodaj parametr typu nowej klasy, jako wartod przekazujc null. Przetestuj.
24
Parametry i zmienne
Introduce Parameter Object:
o
Dla kadego z parametrw do usunicia, zamieo kod wykorzystujcy ten parametr w metodzie na kod korzystajcy z nowo wprowadzonego obiektu. Zamieo wartod pust w wywoaniu metody na odwoanie do konkretnego obiektu. Przetestuj. Zastanw si, czy nie warto przesund czci funkcjonalnoci do nowego obiektu za pomoc Move Method.
Refaktoryzacja kodu w jzyku PHP
www.devcastzone.com
25
Parametry i zmienne
Replace Parameter with Method:
o
Jeli trzeba, wydziel obliczanie parametru do osobnej metody. Zamieo odniesienia do parametru w ciele metody na odniesienia do metody zwracajcej wartod parametru. Przetestuj. Usuo niepotrzebne parametry za pomoc Remove Parameter.
26
Parametry i zmienne
Replace Paremeter with Explicit Methods:
o o
Stwrz metod dla kadej wartoci parametru. Dla kadej z gazi instrukcji warunkowej, wywoaj odpowiedni metod. Przetestuj. Zamieo wywoanie metody rdowej na wywoania nowych metod. Przetestuj. Usuo metod rdow, gdy nie bdzie ju odwoao do niej.
27
Parametry i zmienne
Remove Parameter:
o
Sprawd, czy sygnatura metody jest zaimplementowana w pod- i nadklasach. Jeli ktra z nich wykorzystuje ten parametr, nie dokonuj tej refaktoryzacji. Nie dokonuj tej refaktoryzacji rwnie, jeli metoda jest czci interfejsu a parametr w kontekcie tego interfejsu ma znaczenie. Usuo parametr z sygnatury metody oraz wszystkie odwoania do niego. Przetestuj.
28
Parametry i zmienne
Replace Type Code with Subclasses:
o o
Uyj Self Encapsulate Field na zmiennej oznaczajcej typ. Dla kadej wartoci typu stwrz now podklas. Nadpisz gettera zwracajcego typ klasy jako funkcj zwracajc sta.
29
Parametry i zmienne
Replace Type Code with Subclasses:
o
Podmieo klas na podklasy w miejscach, w ktrych tworzysz obiekty. Wzorzec Factory Method (opisany w module 4) bdzie tutaj pomocny. Przetestuj kad podklas. Usuo kod odpowiedzialny za typ z nadklasy. Zadeklaruj akcesory dla typu jako abstrakcyjne. Przetestuj.
30
Proces tworzenia kodu Definicja problemu. Reengineering. Redesign a refaktoryzacja Cechy refaktoryzacji Podsumowanie Definicja Systematyka zapachw kodu The Bloaters The Object-Orientation Abusers The Change Preventers The Dispensables The Couplers Przygotowanie do refaktoryzacji Klasy Metody Wartoci i pola Parametry i zmienne
Tworzenie aplikacji z uyciem biblioteki Hibernate
www.devcastzone.com
2.
Zapachy kodu
o o o o o
o
o
3.
Podstawowe refaktoryzacje
o o o o o
31
o
o o
Wzorce projektowe po co, dlaczego? Creation Method State/Strategy Dekoratory Observer Composed Method Adapter Dziedziczenie Powizania Wzorce Pozostae Automatyzacja w refaktoryzacji zakres i moliwoci Przeszukiwanie Problemy zwizane z przeszukiwaniem Automatyczne wykrywanie zapachw za pomoc refleksji Narzdzia do automatyzacji
5.
Wysokopoziomowe refaktoryzacje
o o o
6.
Automatyzacja refaktoryzacji
o o o o o
32
o
o
Refaktoryzacja w cyklu ycia projektu Refaktoryzacja jako proces cigy Czytelnod kodu Kiedy refaktoryzowad? Inne sposoby podniesienia jakoci kodu Prefaktoryzacja z czym to si je? Podejcia w prefaktoryzacji Prymitywy s ze czenie i dzielenie Kod jeszcze bardziej czytelny Klasa nie jest dobra na wszystko Trzy prawa obiektw Retrospekcje
Tworzenie aplikacji z uyciem biblioteki Hibernate
www.devcastzone.com
8. Prefaktoryzacja
o o o o o o o o
33
Zapraszamy
34