dagblog.
← Archiv

ORM letem světem


Do základní architektury správné webové aplikace patří persistence vrstva. Záměrně používám 
 anglického výrazu neboť označení datová vrstva mi přijde trochu zavádějící v souvislosti 
 s třívrstvým modelem.

Proč persistence vrstva a ORM

Základní vlastností persitence vrstvy je odstínit vyšší vrstvy, především business vrstvu,
 od konkrétního datového zdroje. To má půvab v jednoduché změně backendu (datového zdroje) 
 v pozadí, bez nutnosti změny v aplikačním kódu.

Způsobů jak výše uvedeného dosáhnout je několik, ale troufám si tvrdit, že ten nejpoužívanější
 je mapování objektu na relace tzv. ORM. Mapování
 je způsob jakým vyjadřujeme relace pomocí objektů.

Představme si případ kdy máme v relační databázi tabulku pro zaměstnance a tabulku pro jejich 
 telefonní čísla. Při mapování nám v takovém případě vzniknou dva objekty, jeden odpovídá tabulce 
 zaměstnanec (sloupečky tabulky odpovídají rozhraní objektu) a druhý tabulce telefonních čísel. 
 Zároveň při mapování vyjádříme relaci 1:n mezi zaměstnancem a telefonním číslem, mezi objekty
 je tento vztah realizován pomocí vnořených kolekcí.

V aplikační logice pak nepíšeme SQL dotazy, ale jejich obdoby pro daný OR framework 
 např. Hibernate má jazyk HQL (Hibernate Query Language).
 Výsledkem takového dotazu je pak objekt nebo kolekce objektů, v našem fiktivním případě by dotaz 
 select z from Zamestnanec z where z.prijmeni = ? vrátil objekt nebo kolekci objektů 
 Zamestnanec.

OR frameworky nabízejí báječné rozhraní pro objekty. Představme si, že máme 
 formulář pro zadávání nových zaměstnanců, odesláním takového formuláře můžeme
 vytvořit v aplikační logice objekt Zamestnanec, který díky namapování 
 (objektu Zamestanec odpovída tabulka zamestnanec) a provolání specifické metody
 frameworku pro ukládání objektu, tohoto zaměstnance uložíme.

Nutnost specifikace persistence vrstvy vedla k vytvoření rozhraní JDO (Java Data Objects), 
 které unifikuje jednotlivé aspekty, které byly proprietárně řešeny jednotlivými frameworky. Pro další studium
 bych doporučoval článek Scotta W. Amblera The Fundamentals of Mapping Objects to Relational Databases
 a Richarda Hightowera Object-relation mapping without the container nebo porovnání jednotlivých ORM frameworku.

Verze na Medium

Související články

Související epizody CZ Podcastu