Objektově relační mapování: Porovnání verzí

Z Wikipedie, otevřené encyklopedie
Smazaný obsah Přidaný obsah
Addbot (diskuse | příspěvky)
m Bot: Odstranění 21 odkazů interwiki, které jsou nyní dostupné na Wikidatech (d:q58748)
m +link
Řádek 8: Řádek 8:
Důležitou funkcí ORM je zajistit [[persistence|persistentní]] uchování dat, tedy aby data, která jsou v aplikaci uložena v operační paměti, zůstala nepoškozena po plánovaném či neplánovaném ukončení běhu aplikace.
Důležitou funkcí ORM je zajistit [[persistence|persistentní]] uchování dat, tedy aby data, která jsou v aplikaci uložena v operační paměti, zůstala nepoškozena po plánovaném či neplánovaném ukončení běhu aplikace.


ORM se dále stará o automatickou konverzi rozdílných datových typů mezi databázovým systémem a programovacím jazykem. Pokročilé techniky ORM také řeší například možnost využití objektové dědičnosti, kterou relační databáze nepodporují.
ORM se dále stará o automatickou konverzi rozdílných datových typů mezi databázovým systémem a programovacím jazykem. Pokročilé techniky ORM také řeší například možnost využití [[Dědičnost (objektově orientované programování)|objektové dědičnosti]], kterou relační databáze nepodporují.


Nicméně '''hlavním cílem ORM je synchronizace mezi používanými objekty v aplikaci a jejich reprezentací v databázovém systému tak, aby byla zajištěna persistence dat'''.
Nicméně '''hlavním cílem ORM je synchronizace mezi používanými objekty v aplikaci a jejich reprezentací v databázovém systému tak, aby byla zajištěna persistence dat'''.
Řádek 37: Řádek 37:


== Dědičnost ==
== Dědičnost ==
{{Hlavní článek|Dědičnost (objektově orientované programování)}}
Dědičnost je jedna ze stěžejních vlastností objektově orientovaného programování. Pomocí dědičnosti lze vytvářet hierarchickou strukturu tříd a při správném návrhu zvýšit znovu-použitelnost kódu. Relační databáze však dědičnost (a tím pádem ani [[polymorfismus]]) nepodporují a proto je potřeba využít techniky, jak hierarchii tříd rozložit do databázových tabulek. V případě použití dědičnosti je typické, že podoba datového modelu závisí na vybraném návrhovém vzoru. Návrhové vzory pro dědičnost lze kombinovat se vzory ''Row Data Gateway'', ''Active Record'' a ''Data Mapper''. U vzorů ''Row Data Gateway'' a ''Active Record'' je nutné, aby entitní třída byla potomkem speciální třídy, která je součástí ORM knihovny. To může komplikovat návrh diagramu tříd. Proto je vhodné kombinovat vzory pro definování dědičnosti se vzorem ''Data Mapper'', jehož implementace zpravidla nevyžaduje, aby entitní třída byla potomkem speciální třídy, která by byla součástí ORM knihovny.
Dědičnost je jedna ze stěžejních vlastností objektově orientovaného programování. Pomocí dědičnosti lze vytvářet hierarchickou strukturu tříd a při správném návrhu zvýšit znovu-použitelnost kódu. Relační databáze však dědičnost (a tím pádem ani [[polymorfismus]]) nepodporují a proto je potřeba využít techniky, jak hierarchii tříd rozložit do databázových tabulek. V případě použití dědičnosti je typické, že podoba datového modelu závisí na vybraném návrhovém vzoru. Návrhové vzory pro dědičnost lze kombinovat se vzory ''Row Data Gateway'', ''Active Record'' a ''Data Mapper''. U vzorů ''Row Data Gateway'' a ''Active Record'' je nutné, aby entitní třída byla potomkem speciální třídy, která je součástí ORM knihovny. To může komplikovat návrh diagramu tříd. Proto je vhodné kombinovat vzory pro definování dědičnosti se vzorem ''Data Mapper'', jehož implementace zpravidla nevyžaduje, aby entitní třída byla potomkem speciální třídy, která by byla součástí ORM knihovny.



Verze z 15. 5. 2013, 10:48

Objektově relační mapování (ORM, O/RM nebo O/R mapování) je programovací technika v softwarovém inženýrství, která zajišťuje automatickou konverzi dat mezi relační databází a objektově orientovaným programovacím jazykem.

Teorie

Při modelování a vývoji aplikací je snaha co nejvěrněji zachytit realitu. Objekty reálného světa jsou v aplikaci reprezentovány jako entity. Zatímco je v relační databázi entita reprezentována jako řádek, resp. množina řádků v databázových tabulkách, tak v objektově orientovaném jazyce je entita zpravidla reprezentována jako instance nějaké třídy.

Tato rozdílná reprezentace entit vedla ke vzniku programovací techniky, označované jako ORM, která se stará o konverzi mezi relační databází a objekty, se kterými se pracuje v objektově orientovaném jazyce. Technika se tak snaží vývojáři dát unifikovaný přístup k libovolnému objektu, resp. entitě, se kterou v aplikaci pracujeme. Díky tomu je vývojář při práci s daty, které jsou v aplikaci reprezentovány právě pomocí objektů, do jisté míry odstíněn od nutnosti pracovat s SQL dotazy konkrétní relační databáze. Použití ORM usnadňuje zejména provádění běžných databázových operací jako je čtení, zápis, úprava a mazání dat. Zkráceně označované jako CRUD operace. Důležitou funkcí ORM je zajistit persistentní uchování dat, tedy aby data, která jsou v aplikaci uložena v operační paměti, zůstala nepoškozena po plánovaném či neplánovaném ukončení běhu aplikace.

ORM se dále stará o automatickou konverzi rozdílných datových typů mezi databázovým systémem a programovacím jazykem. Pokročilé techniky ORM také řeší například možnost využití objektové dědičnosti, kterou relační databáze nepodporují.

Nicméně hlavním cílem ORM je synchronizace mezi používanými objekty v aplikaci a jejich reprezentací v databázovém systému tak, aby byla zajištěna persistence dat. Vývojář potřebuje persistentně uchovávat objekty, ale nepotřebuje se starat, jak se tato persistence provede.

Využití ORM

Řada

Nasazení

Konverze mezi relační databází a modelovými objekty není bezproblémová, ale je spojena s řadou komplikací, souhrnně označovaných jako object-relational impedance mismatch . Tyto problémy, resp. jejich možné řešení jsou důvodem pro existenci návrhových vzorů pro ORM. Martin Fowler ve své publikaci[1] definoval návrhové vzory pro práci s ORM.

Dědičnost

Dědičnost je jedna ze stěžejních vlastností objektově orientovaného programování. Pomocí dědičnosti lze vytvářet hierarchickou strukturu tříd a při správném návrhu zvýšit znovu-použitelnost kódu. Relační databáze však dědičnost (a tím pádem ani polymorfismus) nepodporují a proto je potřeba využít techniky, jak hierarchii tříd rozložit do databázových tabulek. V případě použití dědičnosti je typické, že podoba datového modelu závisí na vybraném návrhovém vzoru. Návrhové vzory pro dědičnost lze kombinovat se vzory Row Data Gateway, Active Record a Data Mapper. U vzorů Row Data Gateway a Active Record je nutné, aby entitní třída byla potomkem speciální třídy, která je součástí ORM knihovny. To může komplikovat návrh diagramu tříd. Proto je vhodné kombinovat vzory pro definování dědičnosti se vzorem Data Mapper, jehož implementace zpravidla nevyžaduje, aby entitní třída byla potomkem speciální třídy, která by byla součástí ORM knihovny.

Reference

  1. FOWLER, Martin. Patterns of Enterprise Application Architecture. [s.l.]: Addison Wesley, 2002. ISBN 0-321-12742-0. S. 560. (anglicky) 

Související články