Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

ORM frameworky pro PHP5: Obecný úvod

ORM (Object Relational Mapping), tedy metoda mapování relační databáze na objekty, má podporu ve všech moderních programovacích jazycích. S příchodem PHP5 a ustálením koncepce objektového programování začal také vývoj ORM frameworků pro PHP. V tomto třídílném miniseriálu se seznámíme se dvěma zástupci návrhového vzoru Active Record a ukážeme si přínosy jejich nasazení v reálných situacích.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Významnějších ORM frameworků pro PHP5 je v současnosti několik desítek. Většina je založena na návrhovém vzoru Active Record, kdy objekt reprezentuje řádek tabulky a obstarává základní operace s řádkem: vytvoř, aktualizuj a smaž (v angličtině zkratka CRUD, která bude i dále použita jako označení základních operací). Frameworky je možné dělit podle počtu funkcí, které nabízejí programátorovi.

Může se jednat o minimalistický přístup, kdy je poskytnuta abstraktní databázová vrstva pro jednotný přístup k různým databázovým systémům, základní operace CRUD a případně další funkce pro rychlé získání záznamu (např. podle primárního klíče). Komplexní přístup kromě výše uvedených funkcí přidává další nadstavby, které usnadní vývoj rozsáhlejšího nebo modulárního systému. Frameworky Doctrine a Propel jsou zástupci komplexních frameworků a v následujících článcích se seznámíme s jejich přínosem v reálných projektech.

Před výběrem frameworku je potřeba určit, jaké jsou nároky na vyvíjenou aplikaci. Frameworky Doctrine i Propel jsou nejvhodnější pro aplikace splňující alespoň jednu z těchto podmínek:

  • Aplikace s očekávaným nasazením vícečlenného vývojářského týmu a dlouhodobým vývojem.
  • Modulární aplikace, např. internetový obchod nebo redakční systém, u které je potřeba mít možnost připojovat jednotlivé nezávislé moduly.
  • Kritická aplikace s nutností zajištění kvality kódu.

Výhody použití ORM frameworku

Přínos frameworků klesá se snižující se velikostí aplikace a pro jednoduchou stránku bez redakčního systému a s několika tabulkami ztrácí jejich nasazení smysl. ORM framework vhodně doplňuje MVC (Model View Controler) framework a unit testy, což jsou dobré základy pro vývoj robustních webových aplikací. Pojďme se podrobněji pozastavit nad obecnými výhodami nasazení ORM frameworku:

  • Abstraktní databázová vrstva

    Ačkoliv PHP standardně nabízí PDO pro univerzální přístup k databázovým systémům, stále zůstává nejednotný zápis SQL příkazů (např. omezení pro výběr prvních 10 záznamů z dotazu je různý pro MySQL a MSSQL). Doctrine i Propel nabízí zápis databázových dotazů, který je přenositelný mezi různými databázemi a to i včetně dotazů pro tvorbu nebo aktualizaci struktury tabulek.

  • Zapouzdření do objektů

    Možnost zapouzdřit související funkce přímo do objektu reprezentujícího řádek tabulky velice usnadní čitelnost a testovatelnost kódu. Většina ORM frameworků nabízí předgenerované třídy pro každou tabulku databáze se základními metodami CRUD, gettery a settery. Tyto objekty je možné dále rozšiřovat, aniž by došlo při dalším generování základních tříd k jejich nežádoucímu přepsání.

  • Unit testy

    ORM frameworky mají v mnoha případech zajištěnu kvalitu kódu pomocí unit testů a jsou napsány tak, aby bylo možné testovat i metody v rozšířených třídách. Pokud ORM framework podporuje databáze s paměťovým úložištěm (např. SQLite memory), jsou unit testy velice rychlé a je zajištěno izolované prostředí pro každý běh testu.

  • Validátory hodnot

    Hodnoty objektu (a tedy i záznamu tabulky) jsou nastavovány přes vygenerované gettery a settery nebo přes magické metody představené v PHP5. Proto je možné hodnoty před nastavením validovat případně vyčistit od nebezpečných znaků. ORM frameworky, které jsou generované z databázové struktury nebo popisných souborů (XML, YML nebo anotace), samy vygenerují základní validátory na povinné hodnoty a datové typy proměnných třídy.

  • CRUD generátor

    Základní operace se záznamy jsou hlavním účelem administračního systému. ORM framework je schopen na základě definice databázových objektů vytvořit uživatelské rozhraní pro tyto operace včetně validátorů a výpisů s filtrací. Vygenerované rozhraní je možné dále rozšiřovat a CRUD generátor může úspěšně fungovat jako základ rozsáhlých administračních systémů.

Nevýhody ORM frameworků

  • Učící křivka

    Největší nevýhodou ORM frameworku je nutnost naučit se framework používat. Čím více je framework komplexní, tím více dokumentace je potřeba zpracovat. Při výběru vhodného frameworku je nutné si předem ověřit dostupnost kvalitní dokumentace a zda existuje funkční komunita, která bude schopna podat pomocnou ruku v okamžiku, kdy se dostaneme mimo pole pokryté dokumentací.

  • Riziko výběru špatného ORM frameworku

    Jak již bylo uvedeno výše, ORM frameworků pro PHP je mnoho a výběr toho správného je komplikovaný. Musíme si uvědomit, jaké funkce očekáváme a zhruba jaký objem dat bude cílová aplikace obsahovat. ORM frameworky jsou poměrně mladé a stále se intenzivně vyvíjejí a přichází s novými funkcemi, proto je důležité vybrat framework se silnou vývojářskou komunitou a dostatečně otevřenou licencí, aby nebyly překážky v dalším vývoji. Dále je dobré předem zjistit, jak framework pracuje s většími objemy dat a zda nenarazíme na paměťové limity.

  • Paměťová a procesorová náročnost

    ORM framework přidává do aplikace další vrstvu a v případě větších frameworků je vyšší paměťová náročnost znatelná. Při mapování záznamu tabulky na objekt dochází k takzvané hydrataci (angl. hydrate), každý objekt zabírá své místo v paměti a při načtení většího počtu záznamů můžeme narazit na paměťový limit pro běh jednoho skriptu. Navíc až do PHP 5.3 byly problémy s uvolňováním paměti, zejména u objektů s cyklickými vazbami.

    Nejedná se o nepřekonatelný problém, jen je vždy nutné s paměťovou náročností počítat. Větší množství pasivní záznamů (např. výpis položek) je lepší načíst do proměnné typu pole a pouze položky, na kterých budou volány funkce, načítat do objektů.

Chcete se naučit o PHP víc?

Akademie Root.cz pořádá školení Kurz programování v PHP5. Jednodenní kurz programování v PHP 5 je určen všem webovým vývojářům, kteří se chtějí do hloubky seznámit a sžít s programovacím jazykem PHP ve verzi 5. První část kurzu je zaměřena na nový objektový model se všemi jeho vlastnostmi, ošetření chyb pomocí výjimek a efektivní využití těchto konceptů. Druhá část je zaměřena na nové knihovny PHP 5, především pro práci s databázemi, XML a objekty. Pozornost je věnována i zajištění kompatibility s PHP 4, přechodu z této verze a výhledu na PHP 6. Máte zájem o jiné školení? Napište nám!

ORM frameworky Doctrine a Propel

V dalším dílu článku se podrobněji seznámíme s frameworkem Doctrine. Vlastnosti popsané pro tento framework platí s menšími odchylkami i pro framework Propel. Tyto frameworky byly vybrány, protože se jedná o nejčastěji používané komplexní ORM frameworky. Projekt Propel započal v roce 2005, bohužel ale zhruba od roku 2007 došlo ke zpomalení vývoje a uživatelé zůstali dlouho s poslední stabilní verzí 1.2, která obsahovala ovšem několik nepříjemných vlastností a chyb. V roce 2009 došlo k výměně hlavního vývojáře a opětovnému oživení projektu. Propel je nyní ve verzi 1.4.

Vrstvy ORM frameworku Doctrine

Od roku 2007 byl vyvíjen projekt Doctrine, který zvolil trochu jiný přístup než Propel a přinesl lepší výkon a nové zajímavé funkce. První stabilní verze projektu Doctrine byla představena 1. září 2008. Lze říci, že koncepce zvolená v případě Doctrine je konzistentnější a čistota kódu je mnohem větší (díky stovkám unit testů je vyšší i kvalita kódu). V současnosti probíhá vývoj na verzi Doctrine 2, která naplno využívá možností PHP 5.3 (jmenné prostory, anonymní funkce, vylepšený garbage collector a anotace). Za Doctrine stojí významný MVC framework Symfony a silná vývojářská i uživatelská komunita.

František Tröster

Autor je spoluzakladatel společnosti Inventic s.r.o., která vyvíjí nástroj ORM Designer pro PHP ORM frameworky.

Školení Google+ pro firmy

DW - Školení PPC
  • Jak využít Google+ pro firemní komunikaci a marketing.
  • Čím se liší Google+ od Twitteru a Facebooku z pohledu firemního využití.
  • Jak využít Google+ v souladu s pravidly užívání.
  • Založení Google+ Page (Stránky) krok po kroku, včetně praktických tipů.

Detailní informace o školení Google+ »

Přehled názorů

Nesouhlasím s první větou
Jiří Knesl 27. 1. 2010 00:42
Nový
└ 
Re: Nesouhlasím s první větou
Jiří Knesl 27. 1. 2010 00:49
Nový
 
└ 
Re: Nesouhlasím s první větou
Mastodont 27. 1. 2010 09:37
Nový
 
 
├ 
Re: Nesouhlasím s první větou
František Tröster 27. 1. 2010 10:24
Nový
 
 
│
├ 
Re: Nesouhlasím s první větou
Jiří Knesl 27. 1. 2010 11:34
Nový
 
 
│
│
└ 
Re: Nesouhlasím s první větou
František Tröster 27. 1. 2010 12:51
Nový
 
 
│
├ 
Re: Nesouhlasím s první větou
jos 28. 1. 2010 10:52
Nový
 
 
│
└ 
Re: Nesouhlasím s první větou
Jan Tichý 30. 6. 2010 16:11
Nový
 
 
└ 
Re: Nesouhlasím s první větou
Jiří Knesl 27. 1. 2010 11:05
Nový
 
 
 
└ 
Re: Nesouhlasím s první větou
František Tröster 27. 1. 2010 11:20
Nový
 
 
 
 
└ 
Re: Nesouhlasím s první větou
Jiří Knesl 27. 1. 2010 11:52
Nový
 
 
 
 
 
└ 
Re: Nesouhlasím s první větou
František Tröster 27. 1. 2010 13:02
Nový
CRUD na objektu?
Daniel Kvasnička ml. 27. 1. 2010 07:51
Nový
├ 
Re: CRUD na objektu?
Přezdívka: 27. 1. 2010 10:33
Nový
├ 
Re: CRUD na objektu?
František Tröster 27. 1. 2010 10:35
Nový
│
└ 
Re: CRUD na objektu?
Daniel Kvasnička ml. 27. 1. 2010 14:49
Nový
└ 
Re: CRUD na objektu?
Petr Novotny 28. 1. 2010 10:10
Nový
 
└ 
Re: CRUD na objektu?
Franta Kučera 28. 1. 2010 12:06
Nový
Re: ORM frameworky pro PHP5: Obecný úvod
ToM 27. 1. 2010 10:33
Nový
└ 
Re: ORM frameworky pro PHP5: Obecný úvod
František Tröster 27. 1. 2010 10:39
Nový
 
└ 
Re: ORM frameworky pro PHP5: Obecný úvod
ToM 27. 1. 2010 12:06
Nový
Lazy loading?
none_ 28. 1. 2010 15:20
Nový
└ 
Re: Lazy loading?
František Tröster 28. 1. 2010 22:27
Nový
 
└ 
Re: Lazy loading?
none_ 29. 1. 2010 12:02
Nový
Nette + Doctrine
Srigi 1. 2. 2010 09:28
Nový
├ 
Re: Nette + Doctrine
Matej 8. 2. 2010 13:20
Nový
└ 
Re: Nette + Doctrine
Peter Helcmanovsky 22. 2. 2010 13:13
Nový
 
├ 
Re: Nette + Doctrine
Tom 22. 2. 2010 13:59
Nový
 
└ 
Re: Nette + Doctrine
frosty22 21. 1. 2011 00:37
Nový
neni to vsechno nejak moc komplikovane ?
backup 17. 2. 2010 11:32
Nový
└ 
Re: neni to vsechno nejak moc komplikovane ?
František Tröster 17. 2. 2010 12:04
Nový
Kam zmizela ta diskuze o Propelu?
analytik 5. 5. 2010 23:20
Nový
└ 
Re: Kam zmizela ta diskuze o Propelu?
analytik 5. 5. 2010 23:36
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem