J2EE vzory:DAO — odstínění zdroje dat
Návrhový vzor DAO (Data Acess Object) patří k základním J2EE vzorům, které je
dobré pochopit, pokud chcete tvořit flexibilní, nejen, webové aplikace. Pokud se
děsíte slovního spojeni J2EE vzor, tak vás mohu uklidnit, J2EE je jen
kategorie, do které byl DAO zařazen. V tomto
povídání volně navážu na spot ORM letem světem
Smysl
Zavádí rozhraní mezi zdrojem dat a jejich konzumenty, izoluje
logiku pro získání dat do jedné vrstvy.
Motiv
Stejně jako jsou různorodé aplikace jsou různorodé zdroje dat, které
aplikace využívají. Mezi ty klasické patří relační databáze,
objektové databáze atd. Není neobvyklé, že aplikace využívají další
mnohem specifičtější zdroje jako webové služby.
Tyto a samozřejmě další zdroje dat mají určitý způsob pro získávání dat. V
relačních databázích to je jazyk SQL, pro jejich O/R kolegy to je obdoba
SQL. Zdroje dat se nám můžou v rámci nasazení měnit, aplikace musí umět
spolupracovat jak s MySQL tak Oracle databází, webové služby jsou
nahrazeny XML soubory.
S takto různorodými zdroji dat to v praxi dopadá tak, že v tom horším případě
existuje v aplikační logice plno rozboček když databáze Oracle tak.
V tom lepším případě máme persistentní vrstvu, která nás odstiňuje, ale co když
ji např. z výkonnostních důvodů potřebujeme změnit? Dalším problémem je roztroušení
logiky pro získání dat takřka po všech čertech a z toho plynoucí problémy.
Řešením těchto problému jsou DAO (Data Acess Object), které zavádí rozhraní pro
práci s daty a zároveň implementují potřebnou logiku. Aplikační vrstva pak využívá
služeb DAO vrstvy, která ji odstiňuje od zdroje(ů) dat a zároveň koncentruje
všechnu logiku pro získání dat.

Diagram tříd znázorňuje rozhraní IDao, které dále využívá aplikační logika
odstíněná od konkrétní DAO implementace, která zapouzdřuje jednotlivé datové zdroje.
Přenos dat mezi DAO a aplikační logikou mohou zprostředkovat například
POJO objkety. Volba
konkrétního DAO objektu v závislosti na prostředí může obstarat IoC framework
viz. (Dagblog 17.05.2004)J2EE vzory: Inversion of Control a Dependency Injection nebo
implementace vzoru Factory.
Pro další studium DAO:
- Core J2EE Pattern Catalog Core J2EE Patterns — Data Access Object
- Design Patterns — Data Access Object
- Sean C. Sullivan Advanced DAO programming
Související články
Související epizody CZ Podcastu
- #3 · Java 6 SE, Vývoj webových aplikací
Dagi a Filemon o novinkách v Javě 6 a webových frameworcích.
- #1 · Vývojová prostředí v Javě
První díl CZ Podcastu se věnuje vývojovým prostředím pro Javu.