Refactoring, neboli splácení technického dluhu

Po Code Complete jsem do ruky vzal Refactoring od Martina Fowlera. Hlavní část knihy tvoří katalog refaktoračních technik, od základních Move Method, Rename Method až po větší změny struktury jako Replace Conditional with Polymorphism.

Číst katalog celý je nuda, takže si vybírám hlavně části popisující úmysl a snažím se pochopit, jak Martin Fowler přemýšlí. Hodně témat se opakuje z Code Complete:
Úpravy programu tvoří mnohem větší část celého životního cyklu než samotné psaní.
Kód se píše pro lidi, ne pro počítač.
Hlavním způsobem snižování složitosti je schovávání informací.

Fowler má nějaké užitečné postupy. Například se snaží místo komentářů používat názvy metod. Pokaždé, když má potřebu něco okomentovat, se podívá, jestli komentovaný blok nemůže raději extrahovat do nové metody a dát mu jméno, které by jeho záměr popisovalo místo komentáře.

Ukázka je vidět přímo v popisu Extract Method.

Původní kód

void printOwing() {
    printBanner();

    //print details
    System.out.println ("name:	" + _name);
    System.out.println ("amount	" + getOutstanding());
}

přepíše na

void printOwing() {
    printBanner();
    printDetails(getOutstanding());
}

void printDetails (double outstanding) {
    System.out.println ("name:	" + _name);
    System.out.println ("amount	" + outstanding);
}

Jiný postřeh: Jediné místo, kam podle něj (v kontextu OOP/Javy) patří switch, je tovární metoda. Všude jinde by měl být nahrazený právě factory method a polymorfismem.

Technický dluh
Refactoring mě přiměl k zamyšlení nad technickým dluhem. Rozhodnutí odbýt návrh a vývoj bude mít důsledky v budoucnu, až program budeme chtít upravit, přidat novou platební metodu, upravit formulář apod.

Srozumitelnější kód se lépe spravuje, tak proč jej nepsat rovnou? Můžou k tomu vést různé úmysly. Fowler má moc pěkný kvadrant důvodů pro vznik technického dluhu:

Reckless vs Prudent, Deliberate vs Inadvertent

Technický dluh může vzniknout záměrně nebo neúmyslně, z ledabylého nebo rozvážného přístupu. Je nutné snažit se učinit veškerá rozhodnutí o technickém dluhu explicitně, s vědomím budoucí zátěže.

Refaktoring je vylepšování existujícího kódu, jak zní podtitul knihy, a to vlastně není nic jiného než splácení technického dluhu. Nižší technický dluh (tedy lepší návrh) vede k nižším splátkám, tj. levnějším modifikacím a opravám.

Ze širšího pohledu je Code Complete (a Clean Code) o tom, jak psát software s co nejnižším dluhem (tedy dobře spravovatelný), Refactoring je o splácení existujícího dluhu.

Příspěvek byl publikován v rubrice Nezařazené. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

1 komentář u Refactoring, neboli splácení technického dluhu

  1. Pingback: Jak zrychlit Web(trh) | Webtrh Blog

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

*

Můžete používat následující HTML značky a atributy: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>