SlideShare une entreprise Scribd logo
1  sur  34
Refaktoryzacja kodu w języku
                                  PHP
                          Materiały pochodzą ze strony:
                            www.devcastzone.com




copyright BNS MEDIA
                                     www.devcastzone.com
Podstawowe refaktoryzacje

                          Refaktoryzacja kodu w języku PHP




copyright BNS MEDIA
                                     www.devcastzone.com
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 PHP
copyright BNS MEDIA
                                  www.devcastzone.com          3
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 PHP
copyright BNS MEDIA
                                www.devcastzone.com          4
Klasy
      • Podstawowy problem – realizacja zbyt wielu funkcji
        przez jedną klasę



      • Niespełnianie wstępnych założeo




                           Refaktoryzacja kodu w języku PHP
copyright BNS MEDIA
                                 www.devcastzone.com          5
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 PHP
copyright BNS MEDIA
                                               www.devcastzone.com                6
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 PHP
copyright BNS MEDIA
                                               www.devcastzone.com                 7
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 PHP
copyright BNS MEDIA
                                              www.devcastzone.com                  8
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 PHP
copyright BNS MEDIA
                                              www.devcastzone.com                 9
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 PHP
copyright BNS MEDIA
                                              www.devcastzone.com                 10
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 PHP
copyright BNS MEDIA
                                               www.devcastzone.com                 11
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 PHP
copyright BNS MEDIA
                                              www.devcastzone.com                12
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 PHP
copyright BNS MEDIA
                                                  www.devcastzone.com                13
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 PHP
copyright BNS MEDIA
                                             www.devcastzone.com            14
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 PHP
copyright BNS MEDIA
                                             www.devcastzone.com               15
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 PHP
copyright BNS MEDIA
                                               www.devcastzone.com               16
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 PHP
copyright BNS MEDIA
                                               www.devcastzone.com                17
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 PHP
copyright BNS MEDIA
                                               www.devcastzone.com               18
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 PHP
copyright BNS MEDIA
                                               www.devcastzone.com                 19
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 PHP
copyright BNS MEDIA
                                              www.devcastzone.com                20
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 PHP
copyright BNS MEDIA
                                              www.devcastzone.com              21
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 PHP
copyright BNS MEDIA
                                              www.devcastzone.com              22
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 PHP
copyright BNS MEDIA
                                              www.devcastzone.com                23
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 PHP
copyright BNS MEDIA
                                               www.devcastzone.com                24
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 PHP
copyright BNS MEDIA
                                             www.devcastzone.com          25
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 PHP
copyright BNS MEDIA
                                              www.devcastzone.com             26
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 PHP
copyright BNS MEDIA
                                             www.devcastzone.com            27
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 PHP
copyright BNS MEDIA
                                               www.devcastzone.com                 28
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 PHP
copyright BNS MEDIA
                                               www.devcastzone.com                29
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 PHP
copyright BNS MEDIA
                                              www.devcastzone.com             30
Refaktoryzacja kodu w języku PHP – program
peł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 Hibernate
copyright BNS MEDIA
                                                                 www.devcastzone.com                   31
Refaktoryzacja kodu w języku PHP – program
peł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 Hibernate
copyright BNS MEDIA
                                                                www.devcastzone.com                   32
Refaktoryzacja kodu w języku PHP – program
peł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 Hibernate
copyright BNS MEDIA
                                                            www.devcastzone.com                   33
Refaktoryzacja kodu w języku PHP
           http://www.devcastzone.com/course,refaktoryzacja-kodu-w-
                                  jezyku-php


                                Zapraszamy


                             Tworzenie aplikacji z użyciem biblioteki Hibernate
copyright BNS MEDIA
                                            www.devcastzone.com                   34

Contenu connexe

En vedette

Crowdsourcing testowania aplikacji i serwisów webowych, czyli testowanie 2.0
Crowdsourcing testowania aplikacji i serwisów webowych, czyli testowanie 2.0Crowdsourcing testowania aplikacji i serwisów webowych, czyli testowanie 2.0
Crowdsourcing testowania aplikacji i serwisów webowych, czyli testowanie 2.0Damian Szczurek
 
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)Krzysztof Kotowicz
 
Refactoring code smell
Refactoring code smellRefactoring code smell
Refactoring code smellmartintsch
 
Matryca śledzenia - Traceability Matrix
Matryca śledzenia - Traceability MatrixMatryca śledzenia - Traceability Matrix
Matryca śledzenia - Traceability MatrixRadoslaw Smilgin
 
Grywalizacja (gamification) w testowaniu
Grywalizacja (gamification) w testowaniuGrywalizacja (gamification) w testowaniu
Grywalizacja (gamification) w testowaniuRadoslaw Smilgin
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoringkim.mens
 
Code refactoring
Code refactoringCode refactoring
Code refactoringLalit Kale
 
Code Refactoring
Code RefactoringCode Refactoring
Code RefactoringYu-Chih Lin
 
JavaStart - kurs Java Podstawy
JavaStart - kurs Java PodstawyJavaStart - kurs Java Podstawy
JavaStart - kurs Java PodstawyJavaStart
 

En vedette (11)

Tester Warszawa
Tester WarszawaTester Warszawa
Tester Warszawa
 
Crowdsourcing testowania aplikacji i serwisów webowych, czyli testowanie 2.0
Crowdsourcing testowania aplikacji i serwisów webowych, czyli testowanie 2.0Crowdsourcing testowania aplikacji i serwisów webowych, czyli testowanie 2.0
Crowdsourcing testowania aplikacji i serwisów webowych, czyli testowanie 2.0
 
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
 
Refactoring code smell
Refactoring code smellRefactoring code smell
Refactoring code smell
 
Przetestuj swoje CV
Przetestuj swoje CVPrzetestuj swoje CV
Przetestuj swoje CV
 
Matryca śledzenia - Traceability Matrix
Matryca śledzenia - Traceability MatrixMatryca śledzenia - Traceability Matrix
Matryca śledzenia - Traceability Matrix
 
Grywalizacja (gamification) w testowaniu
Grywalizacja (gamification) w testowaniuGrywalizacja (gamification) w testowaniu
Grywalizacja (gamification) w testowaniu
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoring
 
Code refactoring
Code refactoringCode refactoring
Code refactoring
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoring
 
JavaStart - kurs Java Podstawy
JavaStart - kurs Java PodstawyJavaStart - kurs Java Podstawy
JavaStart - kurs Java Podstawy
 

Refaktoryzacja kodu w języku PHP

  • 1. Refaktoryzacja kodu w języku PHP Materiały pochodzą ze strony: www.devcastzone.com copyright BNS MEDIA www.devcastzone.com
  • 2. Podstawowe refaktoryzacje Refaktoryzacja kodu w języku PHP copyright BNS MEDIA www.devcastzone.com
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 3
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 4
  • 5. Klasy • Podstawowy problem – realizacja zbyt wielu funkcji przez jedną klasę • Niespełnianie wstępnych założeo Refaktoryzacja kodu w języku PHP copyright BNS MEDIA www.devcastzone.com 5
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 6
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 7
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 8
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 9
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 10
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 11
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 12
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 13
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 14
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 15
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 16
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 17
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 18
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 19
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 20
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 21
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 22
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 23
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 24
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 25
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 26
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 27
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 28
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 29
  • 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 PHP copyright BNS MEDIA www.devcastzone.com 30
  • 31. Refaktoryzacja kodu w języku PHP – program peł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 Hibernate copyright BNS MEDIA www.devcastzone.com 31
  • 32. Refaktoryzacja kodu w języku PHP – program peł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 Hibernate copyright BNS MEDIA www.devcastzone.com 32
  • 33. Refaktoryzacja kodu w języku PHP – program peł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 Hibernate copyright BNS MEDIA www.devcastzone.com 33
  • 34. Refaktoryzacja kodu w języku PHP http://www.devcastzone.com/course,refaktoryzacja-kodu-w- jezyku-php Zapraszamy Tworzenie aplikacji z użyciem biblioteki Hibernate copyright BNS MEDIA www.devcastzone.com 34