You are on page 1of 34

Refaktoryzacja kodu w jzyku PHP

Materiay pochodz ze strony: www.devcastzone.com

copyright BNS MEDIA

www.devcastzone.com

Podstawowe refaktoryzacje
Refaktoryzacja kodu w jzyku PHP

copyright BNS MEDIA

www.devcastzone.com

Tred moduu
1. Przygotowanie do refaktoryzacji 2. Klasy 3. Metody

4. Wartoci i pola
5. Parametry i zmienne
copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

Przygotowanie do refaktoryzacji
Zastosowanie frameworka do testw w celu szybkiego sprawdzenia zmian wprowadzonych w kodzie PHP np. PHPUnit i SimpleTest

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

Klasy
Podstawowy problem realizacja zbyt wielu funkcji przez jedn klas

Niespenianie wstpnych zaoeo

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

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

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

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)

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

Klasy

Extract Subclass (c.d.):


o

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).

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

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

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

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

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

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

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

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.

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

12

Metody
Extract Method:
o

Sprawd ile zmiennych jest modyfikowanych przez wyczany kod.


Jeli jedna mona zwrcid j jako wynik nowej metody. Jeli wicej sprbuj zwracad bardziej zoon struktur (obiekt/tablica) lub przekazuj zmienne przez referencj.

Zamieo stary kod przez odwoanie do metody i przetestuj.

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

13

Metody
o

(Move / Pull Up / Push Down) Method:


Przesuo metod tam, gdzie powinna si ona znajdowad (Move wersja oglna) Sprawd zalenoci metody byd moe warto przenied ca grup metod Sprawd, czy istniej implementacje w pod-/nadklasach (polimorfizm moe sprawiad problemy) Zadeklaruj metod w nowej klasie.

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

14

Metody
o

(Move / Pull Up / Push Down) Method:


Skopiuj kod do nowej klasy (dla Push Down do kadej z podklas) Sprawd, czy mona atwo odwoad si do nowego obiektu (problem w Move) Zmieo metod rdow w delegacj. Przetestuj. Usuo (w przypadku Push Down/Pull Up) metod rdow. Dla Move zastanw si, czy warto zachowad j jako delegacj. Jeli nie, podmieo wszystkie referencje do metody na nowy obiekt.

o o

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

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.

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

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.

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

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.

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

18

Wartoci i pola
Self Encapsulate Field:
o

Utwrz akcesory dla danego pola. Znajd wszystkie odniesienia do pola i zastp je za pomoc akcesorw.

Zmieo widocznod pola na prywatn.


Przetestuj.

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

19

Wartoci i pola
o

(Move/Pull Up/Push Down) Field


Utwrz pole w klasie docelowej oraz akcesory dla niego (opcjonalnie). Okrel, w jaki sposb odwoad si do nowego pola z klasy rdowej. W przypadku Move Field potrzebujemy referencji do obiektu nowej klasy. Usuo pole z klasy bazowej. Zamieo wszelkie odniesienia do pola na odniesienia do klasy docelowej. Przetestuj.

o o

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

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.

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

21

Wartoci i pola
Replace Data Value with Object:
o

(Opcjonalnie) zamieo getter na metod zwracajc kopi obiektu zawartego wewntrz klasy rdowej. Przetestuj.

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

22

Parametry i zmienne
o

Preserve Whole Object:


Utwrz nowy parametr dla caego obiektu, ktry chcesz przekazad. Okrel, ktre parametry powinny zostad pobrane z obiektu Dla kadego parametru do usunicia zastp wszelkie odniesienia do niego wewntrz metody na zapytania do obiektu. Przetestuj. Usuo kod w metodzie woajcej, ktry wyciga dane z obiektu dla metody. Przetestuj.

o o

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

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.

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

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

copyright BNS MEDIA

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.

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

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.

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

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.

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

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.

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

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.

copyright BNS MEDIA

Refaktoryzacja kodu w jzyku PHP


www.devcastzone.com

30

Refaktoryzacja kodu w jzyku PHP program penego szkolenia


1. Code Refactoring
o o o o

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

copyright BNS MEDIA

31

Refaktoryzacja kodu w jzyku PHP program penego szkolenia


4. Wzorce projektowe
o o o o

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

copyright BNS MEDIA

Tworzenie aplikacji z uyciem biblioteki Hibernate


www.devcastzone.com

32

Refaktoryzacja kodu w jzyku PHP program penego szkolenia


7. Problemy i zagroenia
o o o

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

copyright BNS MEDIA

33

Refaktoryzacja kodu w jzyku PHP http://www.devcastzone.com/course,refaktoryzacja-kodu-wjezyku-php

Zapraszamy

copyright BNS MEDIA

Tworzenie aplikacji z uyciem biblioteki Hibernate


www.devcastzone.com

34

You might also like