středa 23. června 2004

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 v DAO schématu

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: