CLI aplikace – Best Practises

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
nanuqcz
Člen | 822
+
0
-

Ahoj,
píšu teď jednu CLI aplikaci a narazil jsem na myšlenku, jak správně napsat menu?

use Nette\Application\UI\Form,
    Nette\Application\Request;

class MenusPresenter extends BasePresenter {

    public function renderMenus() {
        // Zobrazíme menu
        echo "1) Foo \n";
        echo "2) Bar \n";
        echo "3) Baz \n";
        echo "Vase volba: ";

        // Přečteme uživatelovu volbu
        $handle = fopen("php://stdin", "r");
        $result = trim( fgets($handle) );
        echo "\n";

        // Spustíme požadovaný presenter
        switch ($result) {
            case '1':
                $foosPresenter = new FooPresenter($this->context);
                $foosPresenter->run( new Request('Foo', 'default', array()) );
                break;
            case '2':
                $foosPresenter = new BarPresenter($this->context);
                $foosPresenter->run( new Request('Bar', 'default', array()) );
                break;
            case '3':
                $foosPresenter = new BazPresenter($this->context);
                $foosPresenter->run( new Request('Baz', 'default', array()) );
                break;
        }
    }

}

Tento způsob se mi moc nelíbí, protože po volbě např FooPresenteru a jeho spuštění běží najednou dva presentery → MenusPresenter a FooPresenter. Pokud ve FooPresenteru bude další menu, které bude spouštět další presenter, tak se postupně můžeme dostat do stavu, kdy běží třeba 10 presenterů najednou a navzájem čekají na svoje ukončení.

Je toto správná cesta? Díky