Zend Framework a modely

Asi předevčírem jsem zase jednou na chvilku nakoukl do tutoriálu Zend Framework Quick Start. Nutno podotknout, že quick start je v případě Zendu opravdový eufemismus. Každý nový projekt se Zend Frameworkem znamená nastudovat tunu dokumentace, aby člověk zjistil, jak co nakonfigurovat, který adresář co znamená atd. Ale o tom psát nechci.

Zdá se, že součástí „rychlého“ úvodu do problematiky je konečně i kapitola o modelech (Create a Model and Database Table). Tahle kapitola mě přímo pobouřila. K jedné tabulce je podle ní potřeba stvořit až tři třídy, které v podstatě dělají to samé.

Na začátku vývoje Zendu v dokumentaci nějaký návod tohohle typu chyběl, takže si vývojáři využití návrhového vzoru Table Data Gateway vykládali po svém a pokoušeli se ho naroubovat na asi známější ActiveRecord. To s sebou nese četná úskalí, ale ve většině případů takové nasazení stačí. Pěkným příkladem je tahle otázka na StackOverflow. Odpověď, kterou autor otázky označil za vyhovující je nádhernou ukázkou rozšířeného bludu, že model je (IS-A) tabulka. Problém je, že běžně je model spíš entita z reálného světa, která o tabulkách nemusí mít ani ponětí. Může se klidně skládat ze záznamů z více tabulek. Jinými slovy model spíše využívá (HAS-A) tabulku.

Výborně je celá problematika vysvětlena v článku jednoho ze spolupachatelů příslušné části Zend Frameworku. Tady se autor – bohužel už trochu s křížkem po funuse – snaží uvést na pravou míru, jak to vlastně při implementaci komponenty Zend_Db mysleli.

Cítím, že příklad v oficiálním tutoriálu je tak nějak filozoficky správně. Pořád se mi ale hnusí představa, že kvůli každému prdu musím vyrábět tunu kódu, který jen překládá data z jednoho objektu do druhého.

Příspěvek byl publikován v rubrice Software se štítky , , . Můžete si uložit jeho odkaz mezi své oblíbené záložky.

Napsat komentář

Vaše emailová adresa nebude zveřejněna.

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>