TOP
Co to jest refaktoryzacja?
Opis
Refaktoryzacja (Refactoring) – zmiany wprowadzone w wewnętrznej strukturze oprogramowania (oprogramowania) w celu ułatwienia jego zrozumienia i szybszej modyfikacji bez zmiany zachowania zewnętrznego. Jest to także restrukturyzacja oprogramowania poprzez zastosowanie sekwencji refaktoryzacji bez zmiany zewnętrznego zachowania oprogramowania.
Zalety refaktoryzacji:
- Refaktoryzacja poprawia projektowanie oprogramowania. Z biegiem czasu w kodzie wprowadzanych jest wiele dodatkowych zmian, a oprogramowanie z czasem traci swoją strukturę. Utrata struktury ma efekt skumulowany. Im trudniej jest dostrzec projekt w kodzie, tym trudniej go utrzymać i tym szybciej się rozpada. Ponadto takie zmiany powodują redundancję i powielanie kodu, czyniąc system trudniejszym do zrozumienia i modyfikacji.
- Refaktoryzacja sprawia, że kod oprogramowania jest bardziej zrozumiały.
Kiedy musisz przeprowadzić refaktoryzację:
- Po dodaniu nowej funkcji;
- Kiedy błąd zostanie naprawiony (naprawiony);
- Podczas przeglądu kodu.
Nieprzyjemny zapach w kodzie (Smells Catalog) :
- Powielanie kodu
- Długa metoda
- Wielka klasa
- Długa lista parametrów
- Rozbieżne modyfikacje
- Strzelanie
- Zazdrosne cechy
- Bloki danych
- Obsesja na punkcie typów elementarnych
- Switch operatorzy
- Równoległe hierarchie naśladowania
- Leniwa klasa
- Społeczność spekulacyjna (teoretyczna).
- Pole tymczasowe
- Wątki wiadomości
- Agent
- Niewłaściwa bliskość
- Alternatywne klasy z różnymi interfejsami
- Niekompletna klasa biblioteczna
- Klasy danych
- Uwagi
Możliwe opcje refaktoryzacji
-
Moving Features Between Objects (Prezentacja całego kodu pomiędzy obiektami):
- Move Method (Metoda oświetlenia) – wyizolować osobną metodę, jeśli jest za długa lub zawiera kod wymagający komentarza.
- Move Field (Ruchome słup) – gdy pole jest używane przez inną klasę częściej niż tam, gdzie jest alternatywne.
-
Organizing Data (dane układu):
- Encapsulate Field (hermetyzacja Pola) - jedną z zasad OOP jest enkapsulacja, czyli ukrywanie danych. Dzięki upublicznieniu obiekty danych mogą odczytywać i zmieniać swoje wartości bez wiedzy właściciela danych. Dlatego zamykamy pole i udostępniamy metody dostępu.
- Encapsulate Collection (Hermetyzacja kollekcii) - często na zajęciach jest zbiór spraw. Ta kolekcja może mieć postać tabeli, listy, zestawu lub wektora. Metoda gettera nie powinna zwracać tego samego obiektu do kolekcji, ponieważ umożliwiłaby klientowi modyfikację zawartości kolekcji bez wiedzy klasy, która jest jej właścicielem. Dlatego należy ustawić wartość zwracaną metodą tylko do odcztu oraz stworzyć metody dodawania/usuwania elementów.
-
Composing Methods (Wyodrębnianie i łunze kodu):
- Extract Method (Metoda oświetlenia) – jeśli istnieje już fragment kodu, który można pogrupować, umieść go w osobnej metodzie o nazwie wyjaśniającej jego definicję. Zatem nazwa metody zastąpi komentarze.
- Inline Method (Osadzanie metod) – czasami warto podać treść metod do kodu, która go dotyczy. Czasami metody treści są oczywiste, jak sama nazwa metod. Może tak być również w przypadku, gdy istnieje wiele różnych metod, których struktura jest mniej efektywna, dlatego lepiej jest wrzucić je wszystkie do jednej ogólnej metody, a następnie rozdzielić w inny sposób.
- Inline Temp (Wprowadzenie tymczasowej) – zastąpienie tymczasowej, do której tylko raz przypisane jest wyrażenie proste. Czasami taka zmienna zakłóca inne refaktoryzacje.
- Replace Temp with Query (Zastąpienie metody tymczasowej tymczasowej) – jest uzywajna jest zmienna tymczasowa, gdy do vyraženia uzywana vyrażenia vaļuť W tym przypadku zastępujemy wyrażenie metodą, a wszystkie odniesienia w kodzie zastępujemy nową metodą.
- Split Temporary Variable (Podzielna zmienna tymczasowa) – ma zastovanie, jeśli pojedyncza zmienna tymczasowa jest używana do przypisania wielu wynyky do ryozyny wynyky (chyba że ta zmienna jest używana w sumie w ogólnej i nie jest zmienna srzewijcą do accumulacji wynyku). W takim przypadku dla kodego przypisania dwarsymy osobną zmienną.
-
Simplifying Conditional Expressions (Upraszczanie wyrażone za pomocą warunków):
- Decompose Conditional (Operator warunkowy Rozkład) – wykonywany, gdy mamy kontrolwy łańcuch kontroli (if-then-else). Zastupepamy warunek (if), część then i else parametrami metodami. Przyczynia się do lepszego pozrumenia straty rozbranchień, a nazwa metody wyszynajają cel odpowiedni fragment kodu.
- Consolidate Conditional Expression (Konsolidacja warunków warunkowych) - przewądza się, ifję istjenie kilku kontroli kontrolli, co daje ten sam wynik. Należy połączyć wszystkie kontrolki w jednym wyrażeniu warunkowym lub metodzie.
- Consolidate Duplicate Conditional Fragments (Konsolidacja zduplikowanych fragmentów konsolidówych) – ten sam fragment występuje we wszystkich gałęziach warunkowych. Musisz przenieść fragment kodu poza wyrażenie.
- Remove Control Flag (Usuwanie flagi kontrolnej) – istnie zmienna, która służy jako flaga ustalająca dla szeregu równań logicznych. Zamiast tego używamy break lub RETURN.
- Replace Conditional with Polymorphism (Zastąpienie operatora polimorfizmem warunkowym) – jest wykonywana, gdy występuje operator warunkowy, którego zachowanie zależy od typu obiektu. Konieczne jest zastosowanie każdej gałęzi operatora warunkowego do przeciążonej metody podklasy. Upewnij się, że kod źródłowy jest abstrakcyjny.