Dao

Dao

Introduktion:
DAO bruges til at implementere data access til at kunne tilgå data i et givent lager.
Desuden bruges det til at afkoble implementationen af lager tilgangen fra resten af applikationen.
DAO giver et ensartet API for adgang til data i et lager, som f.eks. filer, databaser LDAP, XML o.s.v.

Motivation:
Det fleste enterprice applikationer bruger typisk en relationel database som data storage.
Men data kan sådan set godt gemmes i andre typer data storage, såsom mainframes, legacy systemer, flade filer, o.s.v.
Klienten ønsker adgang til en Datasource. Til dette formål tilføjes f.eks. et database objekt.

Fig. 1 Klient med database objekt.
Fig. 1 Klient med database objekt.

Hvis klienten ønsker adgang til flere forskellige slags datasource's som f.eks. en fil.
Til dette formål tilføjes endnu et objekt til klienten, denne gang et der varetager håndtering af filen.
Fig. 2 Klient med flere database objekter.
Fig. 2 Klient med flere database objekter.

Nu har klienten adgang til to specifikke datasource's og evt. andre kan tilføjes.
Disse har ikke nødvendigvis samme interface, så klienten kan ikke nødvendigvis udskifte dem efter behov.
Der er brug for en mere ensartet tilgang til datasources.

Problem:
Det skal være muligt dynamisk at udskifte det Data Access Objekt, der er associeret til en applikation uden at resten af applikationen bliver berørt af dette.

Løsningen:

Fig. 1 Klient med forskellige Datasource muligheder.
Fig. 1 Klient med forskellige Datasource muligheder.

Data Access Objekter bruges til at abstrahere og afkoble al adgang til data storage. DAO'en styrer så forbindelsen med data source'n og sørger for at hente/gemme data.
Da tilgangen til datasource's er defineret i interfacet er det ikke længere et problem at udskifte datasource, da det blot er en reference der skal udskiftes hos klienten.

Relaterede Patterns:
Sourcekode til eksempel:
DAOTester.java
FileDAO.java
MySQLDAO.java
Både FileDAO og MySQLDAO implementerer interfacet DataAccessObject, så de har et ens interface.
Forskellene implementeres i metoderne, hvor tilgangen til de forskellige datasources kan være hvidt forskellig.
DAOTester opretter først en reference til MySQLDAO.java, der bruges til at kalde metoden create() med noget dummydata.
Herefter overskrives referencen med en ny til FileDAO.java, der også bruges til at kalde metoden create() med dummydata.