Kde zachytáváte výjimky?


09-08-2010 02:00 - Zdroj: php.vrana.cz
Představte si aplikaci podle návrhového vzoru MVC nebo podobného, napsanou třeba v Nette, ve které chceme někde v postranním menu zobrazit třeba výběr článků. Pokud se tento výběr nepodaří načíst, neměl by zamezit zobrazení hlavního obsahu stránky. Model může vypadat třeba takhle: <?php class Article { static function findBests() { return dibi::query("SELECT * FROM [article] WHERE [best]")->fetchAll(); } } ?> Prezenter: <?php class ArticlePresenter { function renderDetail($id) { // tady bude načtení hlavního obsahu stránky - detailu článku // kromě toho načteme i výběr článků pro postranní menu $this->template->bestArticles = Article::findBests(); } } ?> Šablona postranního menu: {if $bestArticles} <h3><a href="{link Article:bests}">Výběr článků</a></h3> <ul> {foreach $bestArticles as $article} <li><a href="{link Article:detail $article->id}">{$article->title}</a></li> {/foreach} </ul> {/if} Zdrojový kód je k dispozici na GitHubu. Jak je vidět, model používá Dibi, které v případě chyby vyvolá DibiException. A mě zajímá, jak s touto výjimkou naložíte. Ošetříte ji už v modelu, v prezenteru, nebo ji snad necháte probublat až na nejvyšší úroveň? A pokud ji nezachytíte už v modelu, použijete dokumentační komentář @throws? A nebude divné, že se prezenter prostřednictvím typu výjimky dozví o implementaci modelu? Nebo ji třeba v modelu přeložíte na jinou výjimku? A jak vlastně bude vypadat blok catch? Všimněte si také toho, že v šabloně je odkaz na Article:bests – to bude stránka, kde je hlavním obsahem právě seznam nejlepších článků a kde je tedy žádoucí, aby skončila pětistovkou, pokud se seznam nepodaří načíst. A aby vypsala informaci o prázdném seznamu, pokud žádné články jako ... - Pokračovat...
addthis





Poslední příspěvky z blogu:
php.vrana.cz


Nejčtenější

Prostřeno TV Prima, tentokrát opět v Praze, kuchyně mexická i belgická

Kdo přežije: Mikronésie na Prima COOL

Hlas ČeskoSlovenska: porota je kompletní

Kdo přežije: Čína na Prima COOL

Koho uvidíme v Survivor Heroes vs. Villains?


Zašlete svůj blog
Požadavky na Blog
Ochrana osobních údajů
Kontakty

This site uses Thumbshots previews