Refaktoryzacja kodu w języku PHP

download Refaktoryzacja kodu w języku PHP

If you can't read please download the document

description

http://www.devcastzone.com/course,refaktoryzacja-kodu-w-jezyku-php Devcast "Refaktoryzacja kodu w języku PHP" przedstawia treści związane z refaktoryzacją kodu, ze specjalnym uwzględnieniem języka PHP. Są w nim omówione podstawowe zasady i pojęcia związane z refaktoryzacją. W dalszej części przedstawiamy zapachy kodu – sytuacje, w których należy podjąć refaktoryzację. Omawiamy także podstawowe metody refaktoryzacji. Oprócz tego analizujemy najważniejsze wzorce projektowe. Rozważamy także największe problemy i zagrożenia, jakie są związane z zagadnieniem refaktoryzacji.

Transcript of Refaktoryzacja kodu w języku PHP

  • 1. Refaktoryzacja kodu w jzykuPHPMateriay pochodz ze strony:www.devcastzone.comcopyright BNS MEDIA www.devcastzone.com

2. Podstawowe refaktoryzacjeRefaktoryzacja kodu w jzyku PHPcopyright BNS MEDIA www.devcastzone.com 3. Tred moduu 1. Przygotowanie do refaktoryzacji 2. Klasy 3. Metody 4. Wartoci i pola 5. Parametry i zmienneRefaktoryzacja kodu w jzyku PHPcopyright BNS MEDIAwww.devcastzone.com3 4. Przygotowanie do refaktoryzacji Zastosowanie frameworka do testw w celuszybkiego sprawdzenia zmian wprowadzonych wkodzie PHP np. PHPUnit i SimpleTestRefaktoryzacja kodu w jzyku PHPcopyright BNS MEDIAwww.devcastzone.com4 5. Klasy Podstawowy problem realizacja zbyt wielu funkcjiprzez jedn klas Niespenianie wstpnych zaoeo Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIA www.devcastzone.com5 6. Klasy Extract Class: oPodziel funkcjonalnod na bazow i do wydzielenia oUtwrz now klas oZastosuj Move Field/Method na elementach doprzeniesienia (testuj po kadym przeniesieniu) oW miar potrzeb, zaktualizuj interfejsy aktualnej i nowejklasy Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIA www.devcastzone.com6 7. Klasy Extract Subclass: oStwrz now podklas dla klasy. oZmieo wywoania konstruktora tam, gdzie chceszskorzystad z nowej klasy oJeli klasa bazowa nie jest ju uywana, zdefiniuj j jakoabstrakcyjna oPrzesuo pola/metody za pomoc Push Down Field/Method(test po kadym przesuniciu) Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIA www.devcastzone.com 7 8. Klasy Extract Subclass (c.d.): oJeli jakie pole opisuje typ obiektu, podstaw na jegomiejsce akcesory zwracajce sta wartod. Wszystkiewyraenia warunkowe korzystajce z tego pola powinnyzostad usunite (poniewa podklasa opisuje tylko jeden typobiektu).Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIAwww.devcastzone.com8 9. Klasy Extract Superclass: oStwrz abstrakcyjn klas i dodaj dziedziczenie po niej wistniejcych klasach oPrzesuo (Pull Up Field/Method) elementy do klasy bazowej oJeli metody robi to samo w inny sposb, uyj SubstituteAlgorithm oJeli metody robi to samo, ale maj inne nazwy, uyjRename MethodRefaktoryzacja kodu w jzyku PHPcopyright BNS MEDIAwww.devcastzone.com 9 10. Klasy Extract Superclass: oJeli po wydzieleniu nadal istniej podobieostwo, sprbujuyd Extract Method + Pull Up Method (ew. Form TemplateMethod, jeli wystpuj rnice w szczegach) oSprawd wykorzystanie klas pochodnych w kodzie; jeli swykorzystywane jedynie mechanizmy klasy bazowej,podmieo odwoania do typwRefaktoryzacja kodu w jzyku PHPcopyright BNS MEDIAwww.devcastzone.com 10 11. Klasy Inline Class: oDodaj publiczne API klasy rdowej do klasy docelowej oPodmieo odwoania do wczanej klasy w kodzie oMove Field/Method na elementach klasy wczanej oJeli klasa docelowa jest jedynym klientem rdowej, uyjHide Method na doczanych metodach oUsuo istniejc klas Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIA www.devcastzone.com 11 12. Metody Extract Method: oStwrz now metod i nazwij j zgodnie z przeznaczeniem. oSkopiuj czd kodu do nowej metody. Zmienne potrzebnew starej metodzie przeka jako parametry, zmienneistniejce tylko w skopiowanym fragmencie potraktuj jakolokalne.Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIAwww.devcastzone.com12 13. Metody Extract Method: oSprawd ile zmiennych jest modyfikowanych przezwyczany kod. Jeli jedna mona zwrcid j jako wynik nowej metody. Jeli wicej sprbuj zwracad bardziej zoon struktur (obiekt/tablica) lub przekazuj zmienne przez referencj. oZamieo stary kod przez odwoanie do metody i przetestuj.Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIAwww.devcastzone.com13 14. Metody (Move / Pull Up / Push Down) Method: oPrzesuo metod tam, gdzie powinna si ona znajdowad (Move wersja oglna) oSprawd zalenoci metody byd moe warto przenied cagrup metod oSprawd, czy istniej implementacje w pod-/nadklasach(polimorfizm moe sprawiad problemy) oZadeklaruj metod w nowej klasie. Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIA www.devcastzone.com14 15. Metody (Move / Pull Up / Push Down) Method: oSkopiuj kod do nowej klasy (dla Push Down do kadej zpodklas) oSprawd, czy mona atwo odwoad si do nowego obiektu(problem w Move) oZmieo metod rdow w delegacj. Przetestuj. oUsuo (w przypadku Push Down/Pull Up) metod rdow.Dla Move zastanw si, czy warto zachowad j jakodelegacj. Jeli nie, podmieo wszystkie referencje dometody na nowy obiekt. Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIA www.devcastzone.com 15 16. Metody Rename Method: oCzy metoda jest implementowana przez nadklasy ipodklasy? Jeli tak, wykonaj ten sam proces dla kadej znich. oSkopiuj zawartod metody do metody o nowej nazwie.Dokonaj niezbdnych modyfikacji w ciele funkcji (np.rekurencja). oZmieo ciao starej funkcji aby wywoaa now funkcj.Przetestuj. Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIA www.devcastzone.com 16 17. Metody Rename Method: oZnajd wszystkie odniesienia do starej metody i zamieo je naodniesienia do nowej. Przetestuj. oUsuo star metod. Jeli stara metoda jest czci interfejsu,zostaw j na miejscu i oznacz jako przestarza. Przetestuj. Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIA www.devcastzone.com17 18. Metody Hide Method: oJeli dana metoda nie jest uywana poza klas, uczyo jprywatn. Przetestuj. oJeli metoda prywatna jest akcesorem, moesz j usund izamienid wszystkie wywoania jako bezporednieodwoania do pola. Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIA www.devcastzone.com 18 19. Wartoci i pola Self Encapsulate Field: oUtwrz akcesory dla danego pola. oZnajd wszystkie odniesienia do pola i zastp je za pomocakcesorw. oZmieo widocznod pola na prywatn. oPrzetestuj. Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIA www.devcastzone.com 19 20. Wartoci i pola (Move/Pull Up/Push Down) Field oUtwrz pole w klasie docelowej oraz akcesory dla niego(opcjonalnie). oOkrel, w jaki sposb odwoad si do nowego pola z klasyrdowej. W przypadku Move Field potrzebujemyreferencji do obiektu nowej klasy. oUsuo pole z klasy bazowej. oZamieo wszelkie odniesienia do pola na odniesienia doklasy docelowej. Przetestuj.Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIAwww.devcastzone.com20 21. Wartoci i pola Replace Data Value with Object: oUtwrz now klas dla wartoci. Dodaj do niej prywatnepole zawierajce nasz dan oraz akcesory. oZamieo akcesory w klasie rdowej na akcesory nowejklasy. oZamieo przypisania wartoci w konstruktorze klasybazowej na stworzenie obiektu nowego typu. Jeli takieprzypisanie nie istniao, wpisz je do konstruktora.Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIAwww.devcastzone.com21 22. Wartoci i pola Replace Data Value with Object: o(Opcjonalnie) zamieo getter na metod zwracajc kopiobiektu zawartego wewntrz klasy rdowej. oPrzetestuj.Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIAwww.devcastzone.com22 23. Parametry i zmienne Preserve Whole Object: oUtwrz nowy parametr dla caego obiektu, ktry chceszprzekazad. oOkrel, ktre parametry powinny zostad pobrane z obiektu oDla kadego parametru do usunicia zastp wszelkieodniesienia do niego wewntrz metody na zapytania doobiektu. Przetestuj. oUsuo kod w metodzie woajcej, ktry wyciga dane zobiektu dla metody. Przetestuj.Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIAwww.devcastzone.com23 24. Parametry i zmienne Introduce Parameter Object: oUtwrz now klas reprezentujc cay zestaw danych. oDo parametrw metody, ktr chcemy zmienid, dodajparametr typu nowej klasy, jako wartod przekazujc null.Przetestuj. Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIA www.devcastzone.com24 25. Parametry i zmienne Introduce Parameter Object: oDla kadego z parametrw do usunicia, zamieo kodwykorzystujcy ten parametr w metodzie na kodkorzystajcy z nowo wprowadzonego obiektu. Zamieowartod pust w wywoaniu metody na odwoanie dokonkretnego obiektu. Przetestuj. oZastanw si, czy nie warto przesund czcifunkcjonalnoci do nowego obiektu za pomoc MoveMethod. Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIA www.devcastzone.com25 26. Parametry i zmienne Replace Parameter with Method: oJeli trzeba, wydziel obliczanie parametru do osobnejmetody. oZamieo odniesienia do parametru w ciele metody naodniesienia do metody zwracajcej wartod parametru.Przetestuj. oUsuo niepotrzebne parametry za pomoc RemoveParameter.Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIAwww.devcastzone.com 26 27. Parametry i zmienne Replace Paremeter with Explicit Methods: oStwrz metod dla kadej wartoci parametru. oDla kadej z gazi instrukcji warunkowej, wywoajodpowiedni metod. Przetestuj. oZamieo wywoanie metody rdowej na wywoanianowych metod. Przetestuj. oUsuo metod rdow, gdy nie bdzie ju odwoao doniej. Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIA www.devcastzone.com27 28. Parametry i zmienne Remove Parameter: oSprawd, czy sygnatura metody jest zaimplementowana wpod- i nadklasach. Jeli ktra z nich wykorzystuje tenparametr, nie dokonuj tej refaktoryzacji. oNie dokonuj tej refaktoryzacji rwnie, jeli metoda jestczci interfejsu a parametr w kontekcie tego interfejsuma znaczenie. oUsuo parametr z sygnatury metody oraz wszystkieodwoania do niego. Przetestuj. Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIA www.devcastzone.com 28 29. Parametry i zmienne Replace Type Code with Subclasses: oUyj Self Encapsulate Field na zmiennej oznaczajcej typ. oDla kadej wartoci typu stwrz now podklas. Nadpiszgettera zwracajcego typ klasy jako funkcj zwracajcsta. Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIA www.devcastzone.com29 30. Parametry i zmienne Replace Type Code with Subclasses: oPodmieo klas na podklasy w miejscach, w ktrychtworzysz obiekty. Wzorzec Factory Method (opisany wmodule 4) bdzie tutaj pomocny. Przetestuj kadpodklas. oUsuo kod odpowiedzialny za typ z nadklasy. Zadeklarujakcesory dla typu jako abstrakcyjne. Przetestuj.Refaktoryzacja kodu w jzyku PHPcopyright BNS MEDIAwww.devcastzone.com 30 31. Refaktoryzacja kodu w jzyku PHP programpenego szkolenia1. Code Refactoring oProces tworzenia kodu oDefinicja problemu. Reengineering. oRedesign a refaktoryzacja oCechy refaktoryzacji oPodsumowanie2. Zapachy kodu oDefinicja oSystematyka zapachw kodu oThe Bloaters oThe Object-Orientation Abusers oThe Change Preventers oThe Dispensables oThe Couplers3. Podstawowe refaktoryzacje oPrzygotowanie do refaktoryzacji oKlasy oMetody oWartoci i pola oParametry i zmienneTworzenie aplikacji z uyciem biblioteki Hibernatecopyright BNS MEDIA www.devcastzone.com 31 32. Refaktoryzacja kodu w jzyku PHP programpenego szkolenia4. Wzorce projektowe oWzorce projektowe po co, dlaczego? oCreation Method oState/Strategy oDekoratory oObserver oComposed Method oAdapter5. Wysokopoziomowe refaktoryzacje oDziedziczenie oPowizania oWzorce oPozostae6. Automatyzacja refaktoryzacji oAutomatyzacja w refaktoryzacji zakres i moliwoci oPrzeszukiwanie oProblemy zwizane z przeszukiwaniem oAutomatyczne wykrywanie zapachw za pomoc refleksji oNarzdzia do automatyzacji Tworzenie aplikacji z uyciem biblioteki Hibernatecopyright BNS MEDIAwww.devcastzone.com 32 33. Refaktoryzacja kodu w jzyku PHP programpenego szkolenia7. Problemy i zagroenia oRefaktoryzacja w cyklu ycia projektu oRefaktoryzacja jako proces cigy oCzytelnod kodu oKiedy refaktoryzowad? oInne sposoby podniesienia jakoci kodu8. Prefaktoryzacja oPrefaktoryzacja z czym to si je? oPodejcia w prefaktoryzacji oPrymitywy s ze oczenie i dzielenie oKod jeszcze bardziej czytelny oKlasa nie jest dobra na wszystko oTrzy prawa obiektw oRetrospekcje Tworzenie aplikacji z uyciem biblioteki Hibernatecopyright BNS MEDIAwww.devcastzone.com 33 34. Refaktoryzacja kodu w jzyku PHP http://www.devcastzone.com/course,refaktoryzacja-kodu-w-jezyku-phpZapraszamy Tworzenie aplikacji z uyciem biblioteki Hibernatecopyright BNS MEDIAwww.devcastzone.com 34