Videotutoriál Doctrine 2 a NotORM: ukládání dat

Školení, která pořádám

Článek vyšel na serveru Zdroják.

První část videotutoriálu se zabývala získáváním dat. Silnou stránkou Doctrine 2 je ale podle některých názorů hlavně ukládání dat. Podle mě je sice ukládání dat ta jednodušší část, na které se toho nedá moc pokazit ani získat, ale podívejme se, jak se s touto částí aplikace Doctrine 2 vypořádá.

Doctrine 2 – ukládání dat

Screencast

Co se mi na řešení v Doctrine nelíbí?

  1. Pro získání referencí na entity se pokládají zbytečné dotazy.
  2. Pokus o přiřazení neplatné entity nezpůsobí žádnou chybu. Místo toho se prostě přiřadí hodnota NULL.
  3. Ani přiřazení hodnoty do neexistujícího sloupce nezpůsobí žádnou chybu. To si musíme ošetřit sami pomocí setterů, Doctrine nám s tím nijak nepomůže.
  4. Doctrine sice má informace o omezení jednotlivých sloupců (např. maximální délka řetězce), ale při nastavování hodnot je nijak nevyužívá. O kontrolu se opět musíme postarat sami.
  5. Pro zvýšení počtu návštěv se položí dva dotazy. Ty se navíc neprovedou atomicky, takže při konkurenčním přístupu se některé návštěvy nezapočtou. Řešením je ruční obsluha transakce, což se mi zdá poněkud nízkoúrovňové.
  6. Vynulování počtu návštěv u všech článků si vyžádá tolik dotazů, kolik je článků.
  7. Doctrine automaticky vytváří jakési proxy soubory, které bychom neměli ručně měnit.

Některé připomínky lze naštěstí poměrně snadno vyřešit. Body 1 a 2 zmizí v případě, že místo metody find použijeme metodu getReference. U nich jde tedy spíše o kritiku seriálu na Zdrojáku, který sice ukládání dat věnuje jeden díl, ale o této důležité metodě se nezmiňuje.

Bod 4 přímo řeší některé databázové systémy. Např. v MySQL lze zapnout striktní režim, který při pokusu o vložení neplatných dat způsobí chybu, ale třeba v SQLite nic takového neexistuje. Doctrine obsahuje vrstvu pro abstrakci databázových systémů, která by chování měla sjednocovat.

Body 5 a 6 lze vyřešit použitím DQL. To už jsme rozebírali v prvním díle – jednak bych se u tak vysoké vrstvy, jakou Doctrine je, chtěl použití DQL pokud možno úplně vyhnout. A za druhé mi stejně jako v prvním díle vadí, že se dvě podobné věci dělají zcela odlišným způsobem – když chci vynulovat počet návštěv u jednoho článku, tak k tomu můžu použít práci s entitami, když u více článků, tak je vhodné použít DQL (obdobně zvyšování počtu návštěv oproti nastavování pevného počtu).

NotORM – ukládání dat

Screencast

Ve srovnání s Doctrine vidím tyto rozdíly:

Závěr

Ani při ukládání dat mi knihovna Doctrine 2 příliš nevyhovovala. Ve třetí části se podíváme na definici modelu.

Jakub Vrána, Seznámení s oblastí, 16.1.2011, diskuse: 0 (nové: 0)

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.