Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Refaktoryzacja kodu w języku PHP

908 views

Published on

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.

Published in: Technology
  • Be the first to comment

Refaktoryzacja kodu w języku PHP

  1. 1. Refaktoryzacja kodu w języku PHP Materiały pochodzą ze strony: www.devcastzone.comcopyright BNS MEDIA www.devcastzone.com
  2. 2. Podstawowe refaktoryzacje Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com
  3. 3. Treśd modułu 1. Przygotowanie do refaktoryzacji 2. Klasy 3. Metody 4. Wartości i pola 5. Parametry i zmienne Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 3
  4. 4. Przygotowanie do refaktoryzacji • Zastosowanie frameworka do testów w celu szybkiego sprawdzenia zmian wprowadzonych w kodzie • PHP – np. PHPUnit i SimpleTest Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 4
  5. 5. Klasy • Podstawowy problem – realizacja zbyt wielu funkcji przez jedną klasę • Niespełnianie wstępnych założeo Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 5
  6. 6. Klasy • Extract Class: o Podziel funkcjonalnośd na bazową i do wydzielenia o Utwórz nową klasę o Zastosuj Move Field/Method na elementach do przeniesienia (testuj po każdym przeniesieniu) o W miarę potrzeb, zaktualizuj interfejsy aktualnej i nowej klasy Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 6
  7. 7. Klasy • Extract Subclass: o Stwórz nową podklasę dla klasy. o Zmieo wywołania konstruktora tam, gdzie chcesz skorzystad z nowej klasy o Jeśli klasa bazowa nie jest już używana, zdefiniuj ją jako abstrakcyjna o Przesuo pola/metody za pomocą Push Down Field/Method (test po każdym przesunięciu) Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 7
  8. 8. Klasy • Extract Subclass (c.d.): o Jeśli jakieś pole opisuje typ obiektu, podstaw na jego miejsce akcesory zwracające stałą wartośd. Wszystkie wyrażenia warunkowe korzystające z tego pola powinny zostad usunięte (ponieważ podklasa opisuje tylko jeden typ obiektu). Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 8
  9. 9. Klasy • Extract Superclass: o Stwórz abstrakcyjną klasę i dodaj dziedziczenie po niej w istniejących klasach o Przesuo (Pull Up Field/Method) elementy do klasy bazowej o Jeśli metody robią to samo w inny sposób, użyj Substitute Algorithm o Jeśli metody robią to samo, ale mają inne nazwy, użyj Rename Method Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 9
  10. 10. Klasy • Extract Superclass: o Jeśli po wydzieleniu nadal istnieją podobieostwo, spróbuj użyd Extract Method + Pull Up Method (ew. Form Template Method, jeśli występują różnice w szczegółach) o Sprawdź wykorzystanie klas pochodnych w kodzie; jeśli są wykorzystywane jedynie mechanizmy klasy bazowej, podmieo odwołania do typów Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 10
  11. 11. Klasy • Inline Class: o Dodaj publiczne API klasy źródłowej do klasy docelowej o Podmieo odwołania do włączanej klasy w kodzie o Move Field/Method na elementach klasy włączanej o Jeśli klasa docelowa jest jedynym klientem źródłowej, użyj Hide Method na dołączanych metodach o Usuo istniejącą klasę Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 11
  12. 12. Metody • Extract Method: o Stwórz nową metodę i nazwij ją zgodnie z przeznaczeniem. o Skopiuj częśd kodu do nowej metody. Zmienne potrzebne w starej metodzie przekaż jako parametry, zmienne istniejące tylko w skopiowanym fragmencie potraktuj jako lokalne. Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 12
  13. 13. Metody • Extract Method: o Sprawdź ile zmiennych jest modyfikowanych przez wyłączany kod. • Jeśli jedna – można zwrócid ją jako wynik nowej metody. • Jeśli więcej – spróbuj zwracad bardziej złożoną strukturę (obiekt/tablica) lub przekazuj zmienne przez referencję. o Zamieo stary kod przez odwołanie do metody i przetestuj. Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 13
  14. 14. Metody • (Move / Pull Up / Push Down) Method: o Przesuo metodę tam, gdzie powinna się ona znajdowad (Move – wersja ogólna) o Sprawdź zależności metody – byd może warto przenieśd całą grupę metod o Sprawdź, czy istnieją implementacje w pod-/nadklasach (polimorfizm może sprawiad problemy) o Zadeklaruj metodę w nowej klasie. Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 14
  15. 15. Metody • (Move / Pull Up / Push Down) Method: o Skopiuj kod do nowej klasy (dla Push Down do każdej z podklas) o Sprawdź, czy można łatwo odwoład się do nowego obiektu (problem w Move) o Zmieo metodę źródłową w delegację. Przetestuj. o Usuo (w przypadku Push Down/Pull Up) metodę źródłową. Dla Move zastanów się, czy warto zachowad ją jako delegację. Jeśli nie, podmieo wszystkie referencje do metody na nowy obiekt. Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 15
  16. 16. Metody • Rename Method: o Czy metoda jest implementowana przez nadklasy i podklasy? Jeśli tak, wykonaj ten sam proces dla każdej z nich. o Skopiuj zawartośd metody do metody o nowej nazwie. Dokonaj niezbędnych modyfikacji w ciele funkcji (np. rekurencja). o Zmieo ciało starej funkcji aby wywołała nową funkcję. Przetestuj. Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 16
  17. 17. Metody • Rename Method: o Znajdź wszystkie odniesienia do starej metody i zamieo je na odniesienia do nowej. Przetestuj. o Usuo starą metodę. Jeśli stara metoda jest częścią interfejsu, zostaw ją na miejscu i oznacz jako przestarzałą. Przetestuj. Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 17
  18. 18. Metody • Hide Method: o Jeśli dana metoda nie jest używana poza klasą, uczyo ją prywatną. Przetestuj. o Jeśli metoda prywatna jest akcesorem, możesz ją usunąd i zamienid wszystkie wywołania jako bezpośrednie odwołania do pola. Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 18
  19. 19. Wartości i pola • Self Encapsulate Field: o Utwórz akcesory dla danego pola. o Znajdź wszystkie odniesienia do pola i zastąp je za pomocą akcesorów. o Zmieo widocznośd pola na prywatną. o Przetestuj. Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 19
  20. 20. Wartości i pola • (Move/Pull Up/Push Down) Field o Utwórz pole w klasie docelowej oraz akcesory dla niego (opcjonalnie). o Określ, w jaki sposób odwoład się do nowego pola z klasy źródłowej. W przypadku Move Field potrzebujemy referencji do obiektu nowej klasy. o Usuo pole z klasy bazowej. o Zamieo wszelkie odniesienia do pola na odniesienia do klasy docelowej. Przetestuj. Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 20
  21. 21. Wartości i pola • Replace Data Value with Object: o Utwórz nową klasę dla wartości. Dodaj do niej prywatne pole zawierające naszą daną oraz akcesory. o Zamieo akcesory w klasie źródłowej na akcesory nowej klasy. o Zamieo przypisania wartości w konstruktorze klasy bazowej na stworzenie obiektu nowego typu. Jeśli takie przypisanie nie istniało, wpisz je do konstruktora. Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 21
  22. 22. Wartości i pola • Replace Data Value with Object: o (Opcjonalnie) zamieo getter na metodę zwracającą kopię obiektu zawartego wewnątrz klasy źródłowej. o Przetestuj. Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 22
  23. 23. Parametry i zmienne • Preserve Whole Object: o Utwórz nowy parametr dla całego obiektu, który chcesz przekazad. o Określ, które parametry powinny zostad pobrane z obiektu o Dla każdego parametru do usunięcia zastąp wszelkie odniesienia do niego wewnątrz metody na zapytania do obiektu. Przetestuj. o Usuo kod w metodzie wołającej, który wyciąga dane z obiektu dla metody. Przetestuj. Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 23
  24. 24. Parametry i zmienne • Introduce Parameter Object: o Utwórz nową klasę reprezentującą cały zestaw danych. o Do parametrów metody, którą chcemy zmienid, dodaj parametr typu nowej klasy, jako wartośd przekazując null. Przetestuj. Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 24
  25. 25. Parametry i zmienne • Introduce Parameter Object: o Dla każdego z parametrów do usunięcia, zamieo kod wykorzystujący ten parametr w metodzie na kod korzystający z nowo wprowadzonego obiektu. Zamieo wartośd pustą w wywołaniu metody na odwołanie do konkretnego obiektu. Przetestuj. o Zastanów się, czy nie warto przesunąd części funkcjonalności do nowego obiektu za pomocą Move Method. Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 25
  26. 26. Parametry i zmienne • Replace Parameter with Method: o Jeśli trzeba, wydziel obliczanie parametru do osobnej metody. o Zamieo odniesienia do parametru w ciele metody na odniesienia do metody zwracającej wartośd parametru. Przetestuj. o Usuo niepotrzebne parametry za pomocą Remove Parameter. Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 26
  27. 27. Parametry i zmienne • Replace Paremeter with Explicit Methods: o Stwórz metodę dla każdej wartości parametru. o Dla każdej z gałęzi instrukcji warunkowej, wywołaj odpowiednią metodę. Przetestuj. o Zamieo wywołanie metody źródłowej na wywołania nowych metod. Przetestuj. o Usuo metodę źródłową, gdy nie będzie już odwołao do niej. Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 27
  28. 28. Parametry i zmienne • Remove Parameter: o Sprawdź, czy sygnatura metody jest zaimplementowana w pod- i nadklasach. Jeśli któraś z nich wykorzystuje ten parametr, nie dokonuj tej refaktoryzacji. o Nie dokonuj tej refaktoryzacji również, jeśli metoda jest częścią interfejsu a parametr w kontekście tego interfejsu ma znaczenie. o Usuo parametr z sygnatury metody oraz wszystkie odwołania do niego. Przetestuj. Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 28
  29. 29. Parametry i zmienne • Replace Type Code with Subclasses: o Użyj Self Encapsulate Field na zmiennej oznaczającej typ. o Dla każdej wartości typu stwórz nową podklasę. Nadpisz gettera zwracającego typ klasy jako funkcję zwracającą stałą. Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 29
  30. 30. Parametry i zmienne • Replace Type Code with Subclasses: o Podmieo klasę na podklasy w miejscach, w których tworzysz obiekty. Wzorzec Factory Method (opisany w module 4) będzie tutaj pomocny. Przetestuj każdą podklasę. o Usuo kod odpowiedzialny za typ z nadklasy. Zadeklaruj akcesory dla typu jako abstrakcyjne. Przetestuj. Refaktoryzacja kodu w języku PHPcopyright BNS MEDIA www.devcastzone.com 30
  31. 31. Refaktoryzacja kodu w języku PHP – programpełnego szkolenia 1. Code Refactoring o Proces tworzenia kodu o Definicja problemu. Reengineering. o Redesign a refaktoryzacja o Cechy refaktoryzacji o Podsumowanie 2. Zapachy kodu o Definicja o Systematyka zapachów kodu o The Bloaters o The Object-Orientation Abusers o The Change Preventers o The Dispensables o The Couplers 3. Podstawowe refaktoryzacje o Przygotowanie do refaktoryzacji o Klasy o Metody o Wartości i pola o Parametry i zmienne Tworzenie aplikacji z użyciem biblioteki Hibernatecopyright BNS MEDIA www.devcastzone.com 31
  32. 32. Refaktoryzacja kodu w języku PHP – programpełnego szkolenia 4. Wzorce projektowe o Wzorce projektowe – po co, dlaczego? o Creation Method o State/Strategy o Dekoratory o Observer o Composed Method o Adapter 5. Wysokopoziomowe refaktoryzacje o Dziedziczenie o Powiązania o Wzorce o Pozostałe 6. Automatyzacja refaktoryzacji o Automatyzacja w refaktoryzacji – zakres i możliwości o Przeszukiwanie o Problemy związane z przeszukiwaniem o Automatyczne wykrywanie zapachów za pomocą refleksji o Narzędzia do automatyzacji Tworzenie aplikacji z użyciem biblioteki Hibernatecopyright BNS MEDIA www.devcastzone.com 32
  33. 33. Refaktoryzacja kodu w języku PHP – programpełnego szkolenia 7. Problemy i zagrożenia o Refaktoryzacja w cyklu życia projektu o Refaktoryzacja jako proces ciągły o Czytelnośd kodu o Kiedy refaktoryzowad? o Inne sposoby podniesienia jakości kodu 8. Prefaktoryzacja o Prefaktoryzacja – z czym to się je? o Podejścia w prefaktoryzacji o Prymitywy są złe o Łączenie i dzielenie o Kod jeszcze bardziej czytelny o Klasa nie jest dobra na wszystko o Trzy prawa obiektów o Retrospekcje Tworzenie aplikacji z użyciem biblioteki Hibernatecopyright BNS MEDIA www.devcastzone.com 33
  34. 34. Refaktoryzacja kodu w języku PHP http://www.devcastzone.com/course,refaktoryzacja-kodu-w- jezyku-php Zapraszamy Tworzenie aplikacji z użyciem biblioteki Hibernatecopyright BNS MEDIA www.devcastzone.com 34

×