Refaktoring v Eclipse

1. Prehľad

Na refactoring.com sa dočítame, že „refactoring je disciplinovaná technika reštrukturalizácie existujúceho súboru kódu, ktorý mení jeho vnútornú štruktúru bez zmeny jeho vonkajšieho správania.“

Spravidla by sme mohli premenovať premenné alebo metódy, alebo by sme chceli vytvoriť náš objekt viac objektovo orientovaný zavedením vzorov návrhu. Moderné IDE majú veľa zabudovaných funkcií, ktoré nám pomáhajú dosiahnuť tieto druhy refaktoringových cieľov a mnoho ďalších.

V tomto tutoriáli sa zameriame na refaktoring v Eclipse, bezplatnom populárnom prostredí Java IDE.

Predtým, ako začneme s akýmkoľvek refaktoringom, je vhodné mať komplexnú sadu testov, aby sme skontrolovali, či sme pri refaktoringu nič nezlomili.

2. Premenovanie

2.1. Premenovanie premenných a metód

Môžeme premenujte premenné a metódy podľa týchto jednoduchých krokov:

    • Vyberte prvok
    • Kliknite pravým tlačidlom myši na prvok
    • Kliknite na ikonu Refaktor> Premenovať možnosť
  • Zadajte nový názov
  • Stlačte Zadajte

Druhý a tretí krok môžeme vykonať aj pomocou pomocou klávesovej skratky, Alt + Shift + R.

Po vykonaní vyššie uvedenej akcie vyhľadá Eclipse každé použitie tohto prvku v danom súbore a nahradí všetky na danom mieste.

Môžeme tiež použiť pokročilú funkciu aktualizovať odkaz v iných triedach podržaním kurzora nad položkou, keď je zapnutý refaktor, a kliknutím na možnosti:

Týmto sa otvorí vyskakovacie okno, v ktorom môžeme premenovať premennú alebo metódu a zároveň máme možnosť aktualizovať odkaz v iných triedach:

2.2. Premenovanie balíkov

Balík môžeme premenovať výberom názvu balíka a vykonaním rovnakých akcií ako v predchádzajúcom príklade. Hneď sa objaví vyskakovacie okno, kde môžeme balíček premenovať, s možnosťami ako aktualizácia referencií a premenovanie podbalíkov.

Balík môžeme tiež premenovať v zobrazení Project Explorer stlačením klávesu F2:

2.3. Premenovanie tried a rozhraní

Triedu alebo rozhranie môžeme premenovať pomocou rovnakých akcií alebo iba stlačením F2 z Prieskumníka projektu. Týmto sa otvorí vyskakovacie okno s možnosťami aktualizácie odkazov spolu s niekoľkými rozšírenými možnosťami:

3. Extrahovanie

Teraz si povieme niečo o ťažbe. Extrahovanie kódu znamená vziať kúsok kódu a presunúť ho.

Napríklad môžeme extrahovať kód do inej triedy, nadtriedy alebo rozhrania. Mohli by sme dokonca extrahovať kód do premennej alebo metódy v tej istej triede.

Eclipse poskytuje rôzne spôsoby, ako dosiahnuť extrakcie, ktoré si ukážeme v nasledujúcich častiach.

3.1. Trieda extraktu

Predpokladajme, že máme nasledujúce Auto triedy v našej kódovej základni:

public class Car {private String licensePlate; private String driverName; private String driverLicense; public String getDetails () {return "Auto [licensePlate =" + licensePlate + ", driverName =" + driverName + ", driverLicense =" + driverLicense + "]"; } // zakladatelia a zakladatelia}

Teraz predpokladajme, že chceme extrahovať podrobnosti ovládača do inej triedy. Môžeme to urobiť do pravým tlačidlom myši kdekoľvek v rámci triedy a výberom možnosti Refaktor> Trieda extraktu možnosť:

Týmto sa otvorí vyskakovacie okno, v ktorom môžeme triedu pomenovať a vybrať, ktoré polia chceme presunúť, spolu s niekoľkými ďalšími možnosťami:

Pred posunom vpred si tiež môžeme zobraziť ukážku kódu. Keď klikneme Ok, Eclipse vytvorí novú triedu s názvom Vodiča predchádzajúci kód bude zmenený na:

public class Car {private String licensePlate; súkromný vodič Driver = nový Driver (); public String getDetails () {return "Auto [licensePlate =" + licensePlate + ", driverName =" + driver.getDriverName () + ", driverLicense =" + driver.getDriverLicense () + "]"; } // zakladatelia a zakladatelia}

3.2. Extrakčné rozhranie

Podobným spôsobom môžeme extrahovať aj rozhranie. Predpokladajme, že máme nasledujúce EmployeeService trieda:

public class EmployeeService {public void save (Employee emp) {} public void delete (Employee emp) {} public void sendEmail (List ids, String message) {}}

Rozhranie môžeme extrahovať do pravým tlačidlom myši kdekoľvek v rámci triedy a výberom možnosti Refactor> Rozhranie na extrakciu možnosť, alebo môžeme použiť Alt + Shift + T klávesová skratka na priame vyvolanie ponuky:

Tým sa otvorí vyskakovacie okno, kde môžeme zadať názov rozhrania a rozhodnúť sa, ktorých členov v rozhraní deklarovať:

Výsledkom tohto prepracovania bude rozhranie IEmpServicea naše EmployeeService trieda sa tiež zmení:

public class EmployeeService implementuje IEmpService {@Override public void save (Employ emp) {} @Override public void delete (Employee emp) {} public void sendEmail (zoznam id, reťazcová správa) {}}

3.3. Extrahujte nadtriedu

Predpokladajme, že máme Zamestnanec trieda obsahujúca niekoľko nehnuteľností, ktoré sa nevyhnutne netýkajú zamestnania osoby:

public class Employee {private String name; súkromný int vek; private int experienceInMonths; public String getName () {návratové meno; } public int getAge () {návratový vek; } public int getExperienceInMonths () {návrat experienceInMonths; }}

Možno budeme chcieť extrahovať nehnuteľnosti nesúvisiace so zamestnaním do a Osoba nadtrieda. Ak chcete extrahovať položky do nadtriedy, môžeme pravým tlačidlom myši kdekoľvek v triede a vyberte ikonu Refaktor> Extrahovať nadtriedu alebo použite Alt + Shift + T priame vyvolanie ponuky:

Týmto sa vytvorí nový Osoba triedy s nami vybranými premennými a metódou a Zamestnanec trieda bude refaktorovaná na:

public class Zamestnanec rozširuje Person {private int experienceInMonths; public int getExperienceInMonths () {návrat experienceInMonths; }}

3.4. Metóda extrakcie

Niekedy môžeme chcieť extrahovať určitý kúsok kódu v našej metóde na inú metódu, aby bol náš kód čistý a ľahko sa udržiaval.

Povedzme napríklad, že v našej metóde máme vloženú slučku for:

public class Test {public static void main (String [] args) {for (int i = 0; i <args.length; i ++) {System.out.println (args [i]); }}}

Vyvolať Metóda extrakcie Sprievodca, musíme vykonať nasledujúce kroky:

  • Vyberte riadky kódu, ktoré chceme extrahovať
  • Kliknite pravým tlačidlom myši na vybratú oblasť
  • Kliknite na ikonu Refaktor> Metóda extrakcie možnosť

Posledné dva kroky je možné dosiahnuť aj klávesovou skratkou Alt + Shift + M. Pozrime sa na Metóda extrakcie dialógové okno:

Týmto sa náš kód refaktoruje na:

public class Test {public static void main (String [] args) {printArgs (args); } private static void printArgs (String [] args) {for (int i = 0; i <args.length; i ++) {System.out.println (args [i]); }}}

3.5. Extrahujte lokálne premenné

Niektoré položky môžeme extrahovať ako lokálne premenné, aby bol náš kód čitateľnejší.

To je užitočné, keď máme String doslovný:

public class Test {public static void main (String [] args) {System.out.println ("Number of Arguments passedlazy" src = "// www.baeldung.com/wp-content/uploads/2019/06/Eclipse- refactor-21.png ">

Posledný krok možno dosiahnuť aj pomocou klávesovej skratky Alt + Shift + L. Teraz môžeme extrahovať našu lokálnu premennú:

A toto je výsledok tohto refaktoringu:

public class Test {public static void main (String [] args) {final String prefix = "Number of Arguments passedextracting-constants"> 3.6. Extrahujte konštantne

Alebo môžeme extrahovať výrazy a literálne hodnoty do statické finále atribúty triedy.

Mohli by sme extrahovať 3.14 hodnotu do lokálnej premennej, ako sme práve videli:

verejná trieda MathUtil {verejný dvojitý obvod (dvojitý polomer) {návrat 2 * 3,14 * polomer; }}

Môže však byť lepšie extrahovať ju ako konštantu, pre ktorú musíme:

  • Vyberte položku
  • Kliknite pravým tlačidlom myši a vyberte možnosť Refaktor> Extrahovať konštantný

Otvorí sa dialógové okno, v ktorom môžeme konštante dať názov a nastaviť jej viditeľnosť spolu s niekoľkými ďalšími možnosťami:

Náš kód teraz vyzerá trochu čitateľnejšie:

verejná trieda MathUtil {súkromná statická konečná dvojitá PI = 3,14; verejný dvojitý obvod (dvojitý polomer) {návrat 2 * PI * polomer; }}

4. Inlining

Môžeme tiež ísť inou cestou a vložiť kód.

Zvážte a Util trieda, ktorá má lokálnu premennú, ktorá sa používa iba raz:

public class Util {public void isNumberPrime (int num) {boolean result = isPrime (num); if (result) {System.out.println ("Number is Prime"); } else {System.out.println ("Číslo nie je prvočíslo"); }} // metóda isPrime} 

Chceme odstrániť výsledok lokálna premenná a vložiť isPrime volanie metódy. Postupujeme podľa týchto krokov:

  • Vyberte položku, ktorú chceme vložiť
  • Kliknite pravým tlačidlom myši a vyber Refaktor> Vložené možnosť

Posledný krok je možné dosiahnuť aj klávesovou skratkou Alt + Shift + I:

Potom máme o jednu premennú menej, aby sme mohli sledovať:

public class Util {public void isNumberPrime (int num) {if (isPrime (num)) {System.out.println ("Number is Prime"); } else {System.out.println ("Číslo nie je prvočíslo"); }} // metóda isPrime}

5. Zatlačte a potiahnite nahor

Ak máme vzťah rodič - dieťa (ako ten náš predchádzajúci Zamestnanec a Osoba príklad) medzi našimi triedami a chceme medzi nimi presunúť určité metódy alebo premenné, môžeme použiť možnosti push / pull poskytované Eclipse.

Ako už názov napovedá, Tlačiť dole voľba presunie metódy a polia z nadradenej triedy do všetkých podradených tried, zatiaľ čo Vytiahni presunie metódy a polia z konkrétnej podradenej triedy do nadradenej, čím sprístupní túto metódu všetkým podradeným triedam.

Ak chceme presunúť metódy nižšie do podradených tried, musíme pravým tlačidlom myši kdekoľvek v triede a vyberte ikonu Refaktor> Zatlačte nadol možnosť:

Otvorí sa sprievodca, v ktorom môžeme vyberať položky, ktoré sa majú tlačiť nadol:

Podobne pre presun metód z podradenej triedy do nadradenej musíme pravým tlačidlom myši kdekoľvek v triede a zvoliť Refaktor> Vytiahnuť:

Týmto sa otvorí podobný sprievodca, v ktorom môžeme vyberať položky, ktoré sa majú vytiahnuť:

6. Zmena podpisu metódy

Ak chcete zmeniť podpis metódy existujúcej metódy, môžeme postupovať podľa niekoľkých jednoduchých krokov:

  • Vyberte metódu alebo umiestnite kurzor niekam dovnútra
  • Kliknite pravým tlačidlom myši a vyberte možnosť Refaktor> Zmeniť podpis metódy

Posledný krok je možné dosiahnuť aj klávesovou skratkou Alt + Shift + C.

Otvorí sa vyskakovacie okno, kde môžete zodpovedajúcim spôsobom zmeniť podpis metódy:

7. Sťahovanie

Niekedy jednoducho chceme presunúť metódy do inej existujúcej triedy, aby bol náš kód objektovejší.

Zvážte scenár, kde máme a Film trieda:

public class Movie {private String title; dvojitá súkromná cena; súkromný typ MovieType; // ďalšie metódy}

A MovieType je jednoduchý výčet:

public enum MovieType {NOVÝ, PRAVIDELNÝ}

Predpokladajme tiež, že máme požiadavku, že ak a Zákazník prenajíma film, ktorý je NOVÝ, bude sa účtovať o dva doláre viac, a to náš Zákazník trieda má nasledujúcu logiku na výpočet Celkové náklady():

public class Customer {private String name; súkromná adresa reťazca; filmy zo súkromného zoznamu; public double totalCost () {double result = 0; pre (Filmový film: filmy) {výsledok + = filmCost (film); } vrátiť výsledok; } súkromné ​​dvojité filmové náklady (filmové filmy) {if (film.getType () .equals (MovieType.NEW)) {návrat 2 + film.getPrice (); } vratit film.getPrice (); } // ďalšie metódy}

Je zrejmé, že výpočet nákladov na film založený na MovieType by bolo vhodnejšie umiestniť do Film triedy a nie Zákazník trieda. Túto logiku výpočtu môžeme ľahko presunúť v Eclipse:

  • Vyberte čiary, ktoré chcete presunúť
  • Kliknite pravým tlačidlom myši a vyberte ikonu Refaktor> Presunúť možnosť

Posledný krok je možné dosiahnuť aj klávesovou skratkou Alt + Shift + V:

Eclipse je dosť chytrý na to, aby si uvedomil, že táto logika by mala byť v našej Film trieda. Názov metódy môžeme podľa potreby zmeniť spolu s ďalšími rozšírenými možnosťami.

Finálny Zákazník kód triedy bude refaktorovaný na:

public class Customer {private String name; súkromná adresa reťazca; filmy zo súkromného zoznamu; public double totalCost () {double result = 0; pre (Filmový film: filmy) {výsledok + = film.movieCost (); } vrátiť výsledok; } // ďalšie metódy}

Ako vidíme, filmCost metóda bola presunutá do našej Film triedy a používa sa v refaktoringu Zákazník trieda.

8. Záver

V tomto tutoriáli sme sa pozreli na niektoré z hlavných refaktorovacích techník poskytovaných Eclipse. Začali sme niekoľkými základnými refaktoringmi, ako je premenovanie a extrahovanie. Neskôr sme videli pohybové metódy a polia okolo rôznych tried.

Ak sa chcete dozvedieť viac, vždy sa môžeme obrátiť na oficiálnu dokumentáciu Eclipse o refaktoringu.


$config[zx-auto] not found$config[zx-overlay] not found