Data Access Layer J. Čokinová, M. Danieliková Obsah  Návrhové vzory  Active Records  Data Mapper  Data Transfer Object  Rady z praxe  Ako funguje teória v praxi Active Records „Objekt, ktorý obaľuje riadok v databázovej tabuľke, zapúzdruje prístup k databáze, a pridáva doménovou logiku.“  Objekt nesie dáta aj chovanie  Každý riadok tabuľky je reprezentovaný konkrétnou inštanciou objektu  Trieda je odvodená od bázovej triedy, ktorá implementuje potrebné rozhranie pre persistenciu objektu  Využitie v rôznych ORM frameworkoch + jednoduchosť a ľahké pochopenie - kód je do istej miery sebavysvetľujúci - porušuje pravidlá dobrého objektového návrhu (persistence ignorance, single responsibility, pevne daná bázová trieda) Data Mapper Vrstva Mapperov, ktorá presúva dáta medzi objektmi a databázou a zároveň ich udržiava nezávisle na sebe a samotnom mapovači.  Vrstva softvéru, ktorá oddeľuje objekty v pamäti od databázy  Objekty v pamäti nemusia vedieť o DB, nepotrebujú kód SQL rozhrania a ani DB schému ani to, že existuje databáza  Doménový objekt  neobsahuje žiadne CRUD alebo vyhľadávacie operácie  je celom nezávislí na databáze  Oddelený mapovací objekt  stará sa o vytváranie, úpravu a mazanie doménových objektov  má prístup k doménovému objektu a databázovému systému Rozdiel medzi Active Record a Data Mapper Active Records Data Mapper Data Transfer Object  Presúvanie veľkého množstva dát medzi klientom a serverom  Redukcia veľkého počtu volaných metód  Samostatné požiadavky -> zoskupenie dát do jedného objektu Rady z praxe  Využívane frameworkov na prístup k dátam  Mapovanie dát  Encapsulation  Prístup do dátovej vrstvy cez jednotné rozhranie  Zachovanie konzistencia dát  Prenositeľnosť a transparentnosť Ako funguje teória v praxi  Využívanie rozhraní medzi vrstvami  Vyhýbanie sa SQL query  Využívanie frameworkov  Nezadaný presný postup, záleží na danom človeku  Problém s konzistenciou dát  Prístup k tabuľkám z rôznych vrstiev Ďakujeme za pozornosť. Zdroje  https://www.slideshare.net/olandri/l08-data-source-layer  https://martinfowler.com/eaaCatalog/dataTransferObject.html  https://pressupinc.com/blog/2014/11/orm-patterns-active-record-data- mapper/  https://cs.wikipedia.org/wiki/Active_Record  http://www.cs.vsb.cz/benes/vyuka/tis/prednasky/14-j2eedp-4.pdf  https://civicrm.org/blog/rasantiago/active-record-versus-data-mapper  https://github.com/StackExchange/Dapper