> 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/ud8-persistencia-en-bases-de-datos/patron-mvc-model-view-controller.md).

# Patrón MVC (Model View Controller)

O Modelo-Vista-Controlador é un patrón de arquitectura de software amplamente utilizado no desenvolvemento de aplicacións de software, especialmente en aplicacións web e de escritorio. O seu obxectivo principal é dividir unha aplicación en tres compoñentes principais, cada un cunha responsabilidade específica. Estes tres compoñentes son:

* **Modelo (Model):** O modelo sería o compoñente que xestionaría o backend da aplicación. Habitualmente descomponse en outros tres compoñentes:

  * **Entity/Modelo de datos:** Conxunto de clases que representan as entidades da base de datos
  * **DAO**: Conxunto de clases que xestionan a persistencia das clases do modelo de datos en un SXBD concreto
  * **Servicio** **(Service Layer)** encargase de xestionar a lóxica de negocio da aplicación, realizar validacións, etc... Delega o acceso a datos nos DAO, que vai a conter como obxectos que pode chamar.&#x20;

  O Modelo será a capa engargada de realizar o almacenamento e a manipulacion dos datos, proporcionado puntos de servicio a controladores ou aplicacións externas que vaian a querer traballar contra a nosa aplicación.
* **Vista (View):** A Vista é a capa encargada da presentación dos datos ao usuario. Representa a interface de usuario e encárgase de mostra-los datos ó usuario dunha maneira comprensible e atractiva. A Vista non debe conter lóxica de negocio; simplemente mostra os datos que recibe do Modelo e envía as interaccións do usuario ao controlador.
* **Controlador (Controller):** O controlador actúa como intermediario entre o Modelo e a Vista. Responde ás interaccións do usuario na interface de usuario e encárgase de actualizar o Modelo en consecuencia. Tamén se encarga de tomar datos do Modelo e pasalos á Vista para a súa presentación. O controlador contén a lóxica de negocio da aplicación e decide cómo se deben manexar as solicitudes e as accións do usuario.

<figure><img src="/files/7Ll2Nx9rOCN1UCiPa0mC" alt=""><figcaption></figcaption></figure>

## Vantaxes de empregar o Modelo Vista Controlador

Esta arquitectura completa a arquitectura que comentamos de DAO - que aplica principalmente para backend -, mantendo as súas vantaxes pero a nivel de arquitectura completa de aplicación - Frontend e Backend-.

* **Desacoplamento e Abstracción:** Cada capa actua como un compoñente independente que se comunica coas outras a partir de unha interface. Isto facilita o intercambio de compoñentes e que as interaccións se realicen en base a comportamento, non a implementacións concretas.
* **Separación de responsabilidades:** Cada capa da aplicación ten a súa propia responsabilidade. Unha vista non pode conter lóxica de acceso a datos nin viceversa.
* **Facilita os cambios na aplicación:** Cambios na codificación de un controlador ou da vista non van a afectar ao funcionamento do servicio.
* **Facilita as probas:** As arquitecturas baseadas en capas facilitan de maneira xeral o testeo.
  * A nivel de **probas unitarias**, unicamente haberá que probar o compoñente modificado
  * A nivel de **probas integradas**, unicamente habrá que probar os compoñentes que interactúen con este compoñente modificado


---

# 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/ud8-persistencia-en-bases-de-datos/patron-mvc-model-view-controller.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.
