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)
Řádek 56: Řádek 56:
[[Kategorie:Objektově orientované programování]]
[[Kategorie:Objektově orientované programování]]
[[Kategorie:Databáze]]
[[Kategorie:Databáze]]

[[ar:مخطط الكائن العلائقية (أو آر أم)]]
[[ca:Mapatge d'objectes relacional]]
[[da:ORM]]
[[de:Objektrelationale Abbildung]]
[[en:Object-relational mapping]]
[[es:Mapeo objeto-relacional]]
[[fr:Mapping objet-relationnel]]
[[he:מיפוי אובייקטי-רלציוני]]
[[hu:Objektum-relációs leképzés]]
[[id:Pemetaan objek-relasional]]
[[it:Object-relational mapping]]
[[ja:オブジェクト関係マッピング]]
[[kk:Объект-реляциялық теңестіру]]
[[lv:Objektrelāciju kartēšana]]
[[pl:Mapowanie obiektowo-relacyjne]]
[[pt:Mapeamento objeto-relacional]]
[[ru:ORM]]
[[sv:ORM]]
[[th:ตัวส่งระหว่างโมเดลเชิงวัตถุและเชิงสัมพันธ์]]
[[uk:Об'єктно-реляційне відображення]]
[[zh:对象关系映射]]

Verze z 4. 4. 2013, 22:32

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