Data Access Object
# Data Access Object

In informatica, nell'ambito della programmazione Web, il DAO (Data Access Object) è un pattern architetturale per la gestione della persistenza: si tratta fondamentalmente di una classe con relativi metodi che rappresenta un'entità tabellare di un RDBMS, usata principalmente in applicazioni web sia di tipo Java EE sia di tipo EJB, per stratificare e isolare l'accesso ad una tabella tramite query (poste all'interno dei metodi della classe) ovvero al data layer da parte della business logic creando un maggiore livello di astrazione ed una più facile manutenibilità. I metodi del DAO con le rispettive query dentro verranno così richiamati dalle classi della business logic.

Il vantaggio relativo all'uso del DAO è dunque il mantenimento di una rigida separazione tra le componenti di un'applicazione, le quali potrebbero essere il "Modello" e il "Controllo" in un'applicazione basata sul paradigma MVC.

Il DAO viene quindi utilizzato per fornire un'interfaccia unificata per l'accesso ai dati, in modo che l'applicazione non debba preoccuparsi di come i dati vengono archiviati o recuperati. Invece, il DAO si occupa di tutto ciò per conto dell'applicazione.

In termini pratici, il DAO si compone di una serie di classi che rappresentano gli oggetti di dominio dell'applicazione (ad esempio un oggetto "Utente" o un oggetto "Ordine"). Queste classi includono metodi per salvare, recuperare, aggiornare e eliminare dati dal database.

L'idea alla base del DAO è quella di separare la logica di accesso ai dati dalla logica dell'applicazione, in modo da semplificare la gestione dei dati e migliorare la manutenibilità del codice. In questo modo, se si decide di cambiare il database utilizzato per l'applicazione, è possibile farlo senza dover modificare l'intera applicazione.

I partecipanti al Data Access Object Pattern sono i seguenti:

* Data Access Object Interface: Questa interfaccia definisce le operazioni standard da eseguire su uno o più oggetti del modello.
* Classe concreta Data Access Object: Questa classe implementa l'interfaccia di cui sopra. Questa classe è responsabile di ottenere i dati da un'origine dati che può essere un database / xml o qualsiasi altro meccanismo di memorizzazione.
* Model Object oppure Value Object: Questo oggetto è un semplice POJO che contiene metodi get/set per memorizzare i dati recuperati con la classe DAO.
