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

V druhé části subjektivního srovnávání Doctrine 2 a NotORM se autor Jakub Vrána zaměří na ukládání dat do databáze v obou těchto systémech.

Seriál: Videotutoriál Doctrine 2 a NotORM (2 díly)

  1. Doctrine 2 a NotORM – videotutoriál 7.1.2011
  2. Videotutoriál Doctrine 2 a NotORM: ukládání dat 17.1.2011

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

Zdrojové kódy

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

Zdrojové kódy

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

  • NotORM se nepokouší o abstrakci databázových systémů, takže i datum je nutné zformátovat pro tu kterou databázi.
  • Pokus o přiřazení do neplatného sloupce nebo neplatné reference
    způsobí podle očekávání chybu. Chování při přiřazení neplatné hodnoty je
    závislé na databázovém systému.
  • Zvýšení počtu návštěv se dělá stejně jednoduše jako přiřazení pevné
    hodnoty. Není zapotřebí vlastní zahajování transakce ani ruční psaní
    dotazu.
  • Aktualizace všech záznamů se zvládne jediným dotazem.

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.

Odpovědi autora Doctrine jsou opět na autorově blogu.

Disclaimer: Autor textu je zároveň autorem popisované knihovny NotORM.

Autor pracuje jako Software Engineer v týmu Gmail Security. V minulosti se zabýval především PHP, o kterém napsal knihu a podílel se na oficiální dokumentaci. Je autorem nástroje pro správu databáze Adminer. Poznámky si zapisuje na weblog PHP triky.

Komentáře: 38

Přehled komentářů

Honza Marek Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
Jakub Vrána Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
Cechjos Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
Jakub Vrána Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
paranoiq Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
Oldis Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
jos Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
Oldis Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
jos Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
jos Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
HosipLan Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
jos Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
Jakub Vrána Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
jos Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
jos Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
Jakub Vrána Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
jos Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
Jakub Vrána Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
jos Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
Jakub Vrána Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
Honza Marek Unit of Work
Nox Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
Palo Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
v6ak Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
Jakub Vrána Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
v6ak Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
Jakub Vrána Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
notnotorm Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
František Kučera Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
notnotorm Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
Jakub Vrána Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
notnotorm Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
Jakub Vrána Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
notnotorm Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
Jakub Vrána Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
František Kučera Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
František Kučera Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
designerrr Re: Videotutoriál Doctrine 2 a NotORM: ukládání dat
Zdroj: https://www.zdrojak.cz/?p=3405