Programátorské cvičení V.


Vypsaná školení


Další programátorské cvičení bude vyžadovat víc přemýšlení. Výsledkem bude opět přehlednější kód, lepší porozumění kódu a větší flexibilita kódu. Cvičení je daleko obecnější a vyžaduje daleko víc analytických schopností, než předchozí. Dva lidé budou nejspíš stejný kód předělávat jiným způsobem.

Takže jaké je dnešní zadání?

V jedné metodě udržujte jednu úroveň abstrakce.

Co to znamená?

Každý kód je jinak abstraktní.

Nejspíš se shodnem, že v této metodě se úrovně abstrakce střídají:

$data = $this->model->fetchData(); // 1.
$encoder = new JsonEncoder; // 2.
file_put_contents(WWW_DIR . '/exports/export.json', $encoder->encode($data)); // 3.

První řádka je velmi obecná. Nějaký model vytahuje nějaká data.

Druhá řádka je konkrétnější, protože říká, jaký konkrétní encoder bude použit. Místo ní by byla řádka

$encoder = $this->getEncoder();
// nebo
$encoder = EncoderFactory::getEncoderFor(EncoderFactory::EXPORT_TO_FILE);

Třetí řádka je nejkonkrétnější, nejspíš bude místo ní volání:

$this->exportData($data)

A metoda exportData si získá path pomocí metody getPath (takže v první metodě už bude jen 1. a 3. řádka - 3. řádka změněná), teprve ona si nechá vytvořit encoder a v metodě writeDataToFile zapíše data na disk.

function exportData($data)
{
        $encoder = EncoderFactory::getEncoderFor(EncoderFactory::EXPORT_TO_FILE);
        $this->writeToFile($this->getPath(), $encoder->encodeData($data);
}

function writeToFile($path, $data)
{
        if (file_exists($path) && ! is_writable($path)) {
                throw new FileSystemException("Unable to write to path: $path");
        }
        file_put_contents($path, $data);
}

Získáme tím kód, ve kterém máme úrovně abstrakce rozdělené natolik, že se samo od sebe vynoří, jak a kam máme přidávat nové funkcionality. Ještě jednou připomínám, že dva lidé uvidí vždy v kódu úrovně abstrakce trošku jinak a je nutné neustále trénovat.

Kategorie

Agile
Cestování
Life Hacking
Minimalismus
Podnikání & Startupy
Použitelnost
Programování

Copyright © 2010 Jiří Knesl; 777 002 104 jiri.knesl@gmail.com RSS
Followujte mě na twitteru