Opis: Enkapsulira pristup podacima u jednoj komponenti, otkrivajući samo logičke operacije. Kod aplikacije poseduje znanje o modelu podataka, ali je dekupovan od odgovornosti za pristup tim podacima.
Opis ovog paterna pozajmljen je iz knjige Data Access Patterns koju vam toplo preporučujem.
Okruženje: Kada se direktno u kod uključe i SQL upiti koji dohvataju podatke i sa njima barataju, veoma brzo može doći do ogromne količine haotičnog koda, koji je jako težak za održavanje. Često su biznis pravila relativno jednostavna, ali zatevaju višestruke pristupe bazi. Kod je na ovaj način izmešan između pristupa bazi i same biznis logike. Dekuplovanjem pristupa bazi u poseban sloj daleko rasterećuje sloj poslovne logike. Isto tako greske se lakše ispravljaju, a kod napisan za pristup podacima može se ponovo koristiti na drugom mestu.
Primena: pristup koji Data Accessor obezbeđuje koristi se u nekoliko situacija:
- kada se želi sakriti fizički pristup bazi podataka i složenost koju ona sa sobom nosi
- kada se želi obezbediti dodatna semantika koju sama baza podataka ne obezbeđuje
- kada se želi napraviti poseban Data Access Layer pomoću koga će biti relativno lako menjati DBMS
Struktura:
DataAccessor interfejs definiše sve operacije koje treba da budu na raspolaganju aplikaciji, u zavisnosti od npr. DBMS postojaće različite ConcreteDataAccessor klase, gde su implementirane konkretne operacije. Naravno izmenom ovih klasa aplikacija će nesmetano raditi sa bilo kojom bazom za koju postoji podrška potpuno neprimentno, jer se aplikativni kod oslanja na definiciju iz interfejsa DataAccessor.
Prednosti ovakvog pristupa ogledaju se u čistom i pregledom kodu, prilagodljivosti sistema na različite DBMS sisteme koji se mogu javiti.
Mane se ogledaju u ograničenjima vezanim za operacije koje DataAccessor interfejs izlaže. Ukoliko se operacije ne naprave dovoljno fleksibilno postoji velika mogućnost degradiranja rešenja, raznoraznim "zahvatima" koji će pokušati da nedodstatke nadomeste na drugi način, rušeći prvobitno postavljenu arhitekturu.