Klávesové zkratky na tomto webu - rozšířené Na obsah stránky

Translate to English… Ins Deutsche übersetzen…

Návrh struktury presenters/views

Jak správně navrhnout strukturu aplikace psané v Nette v pojmech presenter a view (resp. action).

Presenter vs. view

Pro objektový návrh presenterů by se měla dodržovat stejná pravidla, která platí pro OOP jako takové. Konkrétně mám na mysli tezi, že objekt by měl plnit pouze jeden úkol.

Presentery s více pohledy (views) nebo akcemi (actions) svádějí tento princip porušovat. Svým způsobem i sebesložitější aplikaci mohu narvat do jednoho presenteru s obrovským počtem pohledů. A každý z nich bude používat jen svůj okruh komponent a parametrů. Asi cítíte, že to je špatný přístup.

Druhým extrémem je pro každý pohled vytvořit vlastní presenter. Ano, jde také o extrém, ale z hlediska návrhu poměrně čistý (dokonce předchozí verze Nette tak byly koncipované a třída Presenter se jmenovala Page).

Jakou zvolit cestu mezi oběma mantinely? Doporučuji řídit se tímto pravidlem:

V jednom presenteru sdružujte jen ty pohledy, které používají společné komponenty a persistentní parametry.

V tu chvíli začne presenter plnit jen jeden úkol – obhospodařovat své komponenty a persistentní parametry. Pravidlo má navíc příjemný důsledek – automatické předávání persistentních parametrů v Nette bude pracovat velmi efektivně a pouze ve váš prospěch.

Vytvořte hierarchii presenterů

Všechny presentery ve vaší aplikaci by měly tvořit hierarchii. Přinejmenším vytvořte jednoho společného předka. Díky tomu se vyhnete opakování stejného kódu na více místech aplikace. Společný předek může v metodě startup() zajistit připojení k modelu nebo zkontrolovat uživatelská oprávnění.

S hierarchií úzce souvisí automatické předávání persistentních parametrů. Pokud potřebujete, aby se určitý parametr automaticky přenášel mezi skupinou presenterů, tak ho deklarujte na úrovni jejich předka.

Buď final, nebo abstract

Pokuste se hierarchii presenterů navrhnout tak, aby každý z nich představoval buď list, nebo větev. Listem je myšlen presenter, od kterého už nelze odvozovat nové třídy (je deklarovaný pomocí klíčového slova final, na obrázku označen jako leaf). Větev je naopak presenter, který lze použít pouze k odvozování (je deklarovaný jako abstract). Nette nedovolí abstraktní presentery vůbec adresovat.

Tato technika zajistí, že každá akce presenteru bude v celé struktuře jedinečná.

Komentáře RSS 2.0 komentářů » přidat

avatar

#1 enoice http://enoice.fialove.eu nový

Dobrý informace. S těma abstraktníma třídama je to fakt chytrý. Já to řešil tak, že jsem si „větve“ pojmenovával například PresenterAdmin, aby mi nelezli do zelí, chci říct do routy.

Posláno 28. 5. 2008 v 17.01 | Odpovědět

#2 v6ak http://v6ak.profitux.cz/ nový

Co je to vlastně presenter?

Posláno 29. 5. 2008 ve 14.38 | Odpovědět
Na komentář reagoval [3] David Grudl
avatar

#3 David Grudl http://davidgrudl.com nový

#2 v6ak: Možná to spíš znáš pod pojmem controller.

Posláno 30. 5. 2008 v 1.42 | Odpovědět
Na komentář reagoval [4] v6ak
avatar

#4 v6ak http://v6ak.profitux.cz/ nový

#3 David Grudl: Aha, to jo. Dík.

Posláno 30. 5. 2008 v 18.17 | Odpovědět

Tento článek byl uzavřen. Už není možné k němu přidávat komentáře ani hlasovat

Výtah na začátek článku na první komentář

Názory čtenářů v diskusích nejsou názory provozovatele webu, a ten za jejich obsah neodpovídá.

phpFashion © 2004, 2010 David Grudlo webu

Pokud není uvedeno jinak, podléhá obsah těchto stránek licenci Creative Commons BY-NC-ND Creative Commons License BY-NC-ND

Ukázky zdrojových kódů smíte používat s uvedením autora a URL tohoto webu bez dalších omezení.