Jak zdyscyplinować swój kod za pomocą refaktoryzacji (zawiera przykłady PHP)

Opublikowany: 2021-06-22

Podobnie jak wiele innych rzeczy w życiu, nasz kod również wymaga pewnej dyscypliny. Jestem prawie pewien, że żaden programista na świecie nie chce pisać nieczystego kodu. Jednak nieczysty kod nadal istnieje. Może to wynikać z różnych przyczyn – może wynikać z presji biznesowej, braku dokumentacji, braku interakcji między członkami zespołu lub niekompetencji dewelopera. Należy podjąć odpowiednie działania, aby kod był czystszy i aby uniknąć problemów, które mogą pojawić się z tego powodu w przyszłości. Na szczęście możemy rozwiązać te problemy za pomocą zdyscyplinowanej techniki zmiany struktury kodu o nazwie Refactoring .

Refaktoryzacja to technika ulepszania wewnętrznej struktury istniejącego kodu źródłowego programu i utrzymywania jego zewnętrznego zachowania. Jest to krok po kroku procedura ulepszania kodu, która w innym przypadku będzie kosztować nas dużo czasu i wysiłku.

Refaktoryzacja kodu

Wady nieczystego kodeksu

Rozszerzanie rozmiaru kodu źródłowego przez dodawanie do niego nowych programów bez refaktoryzacji przez długi czas sprawia, że ​​kod staje się bałaganiarski i nieczysty. To bardzo utrudnia utrzymanie i dalszy rozwój projektu. Nieczysty kod ma mnóstwo wad:

  1. Zwiększa koszt utrzymania projektu.
  2. Dodanie nowej funkcji zajmuje dużo czasu i czasami nie da się jej dodać.
  3. Spowalnia wprowadzanie nowych osób do projektu.
  4. Zawiera zduplikowany kod.
  5. Nie przechodzi wszystkich testów.

Istnieje wiele innych wad, ale te problemy kosztują organizację dużo pieniędzy i czasu.

Zalety czystego kodu

Czysty i zdyscyplinowany kod ma swoje zalety:

  1. Nie zawiera zduplikowanego kodu.
  2. Zdaje wszystkie testy.
  3. Sprawia, że ​​kod jest bardziej czytelny i łatwiejszy do zrozumienia.
  4. Sprawia, że ​​kod jest łatwiejszy w utrzymaniu i tańszy.

Jest wiele zalet czystego kodu. Proces przekształcania niechlujnego, nieczystego kodu w łatwiejszy w utrzymaniu, czysty kod nazywa się procesem refaktoryzacji.

Proces refaktoryzacji

Refaktoryzacja powinna być wykonana jako seria małych zmian, z których każda nieznacznie poprawia istniejący kod i pozwala na dalsze działanie programu bez jego łamania. Po refaktoryzacji kod powinien stać się czystszy niż wcześniej. Jeśli pozostaje nieczysty, nie ma sensu refaktoryzacji. To tylko strata czasu i wysiłku. Nie należy dodawać nowego kodu podczas refaktoryzacji w celu stworzenia nowej funkcjonalności. Po refaktoryzacji powinien przejść wszystkie testy.

Kiedy przeprowadzać refaktoryzację?

Refaktoryzację należy przeprowadzić, gdy:

  • Dodanie duplikatu kodu do projektu. Ponieważ zduplikowany kod jest trudny do utrzymania, a zmiany w jednym miejscu mogą wymagać aktualizacji w wielu innych.
  • Dodanie funkcji. Refaktoryzacja ułatwia dodawanie nowych funkcji.
  • Podczas naprawiania błędu należy dokonać refaktoryzacji, ponieważ spowoduje to automatyczne wykrycie błędu.
  • Przegląd kodu to ostatni etap refaktoryzacji kodu przed wdrożeniem zmian do środowiska produkcyjnego.

Radzenie sobie z zapachami kodu

Problemy z kodem są czasami nazywane zapachami kodu. To są problemy, które zostały rozwiązane podczas refaktoryzacji. Łatwiej je znaleźć i naprawić.

Na przykład:

  • Duże metody i zajęcia, z którymi bardzo ciężko się pracuje.
  • Niepełne lub nieprawidłowe wykorzystanie koncepcji programowania obiektowego.
  • Kod, który utrudnia dodawanie jakichkolwiek zmian.
  • Zduplikowany i przestarzały kod w projekcie.
  • Silnie powiązany kod.

Techniki refaktoryzacji

Techniki refaktoryzacji to kroki podejmowane w celu refaktoryzacji kodu. Niektóre z technik refaktoryzacji to:

1. Metoda ekstrakcji

// Problem

 function printInvoice() { $this->printHeader(); // Print details. print("name: " . $this->name); print("amount " . $this->getPrice()); }

// Rozwiązanie

 function printInvoice() { $this->printBanner(); $this->printDetails($this->getPrice()); } function printDetails($price) { print("name: " . $this->name); print("amount " . $outstanding); }

Jeśli masz fragment kodu, który można pogrupować, dodaj nową metodę dla tej części kodu i zastąp stary kod. Sprawia, że ​​kod jest bardziej izolowany i usuwa duplikaty.

2. Wyodrębnij zmienną

// Problem

 if (($student->getMarksinMath() > 60) && ($student->getMarksInPhysics() > 60) && ($student->getMarksinChemistry() > 60) && $this->pass) { // do something }

// Rozwiązanie

 $mathResult = $student->getMarksinMath() > 60; $physicsResult = $student->getMarksinPhysics() > 60; $chemistryResult = $student->getMarksinChemistry() > 60; $hasPassed = $this->pass; if ($mathResult && $physicsResult && $chemistryResult && $hasPassed) { // do something }

W przypadku dużych wyrażeń, takich jak wyświetlane w zadaniu, co jest bardzo trudne do zrozumienia, dla każdego wyrażenia można utworzyć różne zmienne. Sprawia, że ​​kod jest bardziej czytelny. Ale tę metodę należy stosować ostrożnie. Ma jednak swoje wady. Kod zostanie wykonany, nawet jeśli warunek jest fałszywy, co nie ma miejsca w przypadku problemu.

3. Metoda inline

// Problem

 function printResult() { return ($this->getResult()) ? “Pass” : “Fail”; } function getResult() { return $this->totalMarks > 300; }

// Rozwiązanie

 function getRating() { return ($this->totalMarks > 300) ? “Pass” : “Fail”; }

Kiedy treść metody jest bardziej oczywista, użyj tej techniki. Zastąp metodę zawartością metody i usuń metodę. Minimalizuje liczbę niechcianych metod.

4. Wbudowana temperatura

// Problem

 $mathMark = $student->getMathResult(); return $mathMark > 60;

// Rozwiązanie

 return $student->getMathResult() > 60;

Jeśli istnieje niechciana zmienna tymczasowa, która tylko przechowuje wynik wyrażenia, usuń zmienną z samym wyrażeniem. Pomaga pozbyć się niepotrzebnych zmiennych.

5. Zamień tablicę na obiekt

// Problem

 $row = []; $row[0] = "Virat Kohli"; $row[1] = 70;

// Rozwiązanie

 $row = new Player(); $row->setName("Virat Kohli"); $row->setNumberofCentury(70);

Jeśli istnieje tablica z różnymi typami danych, zastąp ją obiektem. Ponieważ pola klasy są łatwiejsze do udokumentowania i utrzymania niż tablice z różnymi typami danych.

6. Metoda sparametryzowana

// Problem

 function fivePercentRaise() { } function tenPercentRaise() { }

// Rozwiązanie

 function raise(percent) { }

Jeśli wiele metod wykonuje podobną akcję na danych, zastąp wszystkie metody jedną metodą i przekaż dane jako argumenty. Usuwa zduplikowane i zbędne metody.

7. Oddziel zapytanie od modyfikatora

// Problem

 function getInterest() { $this->interestAmount = $this->principal * 10 / 100; return $this->interestAmount; }

// Rozwiązanie

 function setInterest() { $this->interestAmount = $this->principal * 10 / 100; } function getInterest() { return $this->interestAmount; }

Jeśli metoda zwraca wartość i zmienia obiekt, podziel te dwie metody. Jeden do modyfikacji, a drugi do zwrócenia wyniku. Eliminuje możliwość niezamierzonej modyfikacji obiektu.