> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/ud5-entrada-e-saida-da-informacion/ficheiros/patron-dao-data-access-object.md).

# Patrón DAO (Data Access Object)

O **patrón DAO (Data Access Object)** é unha forma de organizar o código que separa claramente **o acceso aos datos** de outros elementos da aplicación.

Poderiamos falar de unha arquitectura a tres niveles:

* **Modelo (Model)**
  * Representa a información que traballamos, por exemplo: `Persoa` con campos `nome`, `idade`, `cidade`.
  * É simplemente unha clase con atributos e métodos `getter/setter`.
* **Acceso a Datos (DAO)**
  * Clase específica que xestiona todo o que ten que ver con **ler e escribir ficheiros**.
  * Contén métodos para **CRUD** (Create, Read, Update, Delete) sobre o ficheiro.
  * Cada DAO coñece a ruta sobre a que traballa
  * Exemplo de métodos:
    * `crear(Persoa p)` → engadir persoa ao ficheiro
    * `listar()` → ler todas as persoas do ficheiro
    * `actualizar(Persoa p)` → modificar datos dunha persoa
    * `borrar(Persoa p)` → eliminar unha persoa
* **Lóxica de negocio (Service)**
  * Clase que aplica regras de negocio: validacións, cálculo de datos, etc.
  * Conten un ou varios DAOs que se reciben como parámetros no constructor
  * Non accede directamente ao ficheiro; chama ao **DAO**.

{% @mermaid/diagram content="graph TD
subgraph "Lóxica de Negocio"
B\[Service]
end

```
subgraph "Acceso a Datos"
    C[DAO - Data Access Object]
end

subgraph "Persistencia"
    D[Ficheiro .txt/.json/.csv]
end

subgraph "Modelo"
    A[Clase Producto/Alumno/etc]
end

B -->|Usa| A
B -->|Chama| C
C -->|Traballa con| A
C -->|Le/Escribe| D" %}
```

### Vantaxes do uso do patrón DAO

* **Abstracción do acceso a datos:** A capa de servizo ou calquera outra capa que necesite acceder aos datos non necesita saber se os datos están nunha base de datos, un ficheiro, ou unha lista en memoria. Só necesita interactuar co DAO.
* **Facilita o mantemento e os cambios:** Se no futuro decidimos cambiar de almacenamento en lista en memoria a base de datos, só temos que modificar o DAO, sen afectar o resto da aplicación.
* **Separación de responsabilidades**: O DAO encárgase da interacción cos datos, e o servizo encárgase da lóxica de negocio. Esta separación fai que cada capa sexa máis sinxela de manexar e entender.
* **Facilita as probas**: Ao desacoprar a lóxica de negocio e o acceso a datos, podemos crear probas unitarias simulando o DAO sen depender dunha base de datos real.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://educacion.gitbook.io/programacion/ud5-entrada-e-saida-da-informacion/ficheiros/patron-dao-data-access-object.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
