patrones de diseño en java

Los patrones de diseño en Java MVC, DAO, DTO y cómo utilizarlos

Hola que tal, esta vez voy hablar acerca de los patrones de diseño en Java, específicamente de los patrones Modelo Vista Controlador (MVC), Data Acces Object (DAO) y Data Transfer Object (DTO) y su implementación en Java con ejemplos sencillos.

Aprende este y otros temas de Programación Java Web. Accede gratis al Curso de Java EE y suscribete al canal de Youtube.

Qué es un patrón de diseño?

Un patrón de diseño es una solución probada que resuelve un tipo específico de problema en el desarrollo de software referente al diseño.

Existen una infinidad de patrones de diseño los mismos que se dividen en categorías por ejemplo: de creación, estructurales, de comportamiento, interacción etc.

Cada uno se especializa en resolver un problema específico, si quieres profundizar y revisar todas las categorías y ejemplos a detalle puedes visitar Design Patterns Book.

El tema es bastante extenso, que no alcanzaría una sola entrada, pero esta vez quiero hablar de los patrones MVC, DAO, DTO que en lo personal y en la práctica considero los más utilizados al menos para el desarrollo en Java.icon

Por qué utilizar un patrón de diseño?

Ahora, cuales son las ventajas?, bueno son algunas, entre las principales es que permiten tener el código bien organizado, legible y mantenible, además te permite reutilizar código y aumenta la escalabilidad en tu proyecto.

En sí proporcionan una terminología estándar y  un conjunto de buenas prácticas en cuanto a la solución en problemas de desarrollo de software.

Sin más palabras voy ha empezar ha describirlos con sus respectivos ejemplos.

El patrón Model View Controller o MVC

En español Modelo Vista Controlador, este patrón permite separar una aplicación en 3 capas, una forma de organizar y de hacer escalable un proyecto, a continuación una breve descripción de cada capa.

Modelo: Esta capa representa todo lo que tiene que ver con el acceso a datos: guardar, actualizar, obtener datos, además todo el código de la lógica del negocio, básicamente son las clases Java y parte de la lógica de negocio.

Vista: La vista tiene que ver con la presentación de datos del modelo y lo que ve el usuario, por lo general una vista es la representación visual de un modelo (POJO o clase java).

Por ejemplo el modelo usuario que es una clase en Java y que tiene como propiedades, nombre y apellido debe pertenecer a una vista en la que el usuario vea esas propiedades.

Controlador: El controlador es el encargado de conectar el modelo con las vistas, funciona como un puente entre la vista y el modelo, el controlador recibe eventos generados por el usuario desde las vistas y se encargar de direccionar al modelo la petición respectiva.

Por ejemplo el usuario quiere ver los clientes con apellido Álvarez, la petición va al controlador y el se encarga de utilizar el modelo adecuado y devolver ese modelo a la vista.

Si te das cuenta en ningún momento interactúan directamente la vista con el modelo, esto también mantiene la seguridad en una aplicación.

Nota: Si te interesa seguir el tema de programación Web con Java, puedes revisar mi Curso de Programación Java Web, con JSP, Servlet y JPA donde aprenderás paso a paso como desarrollar aplicaciones web con Java.

Que ganó utilizando este patrón?

Lo importante de este patrón es que permite dividir en partes, que de alguna manera son independientes, con lo que si por ejemplo hago algún cambio el modelo no afectaría a la vista o si hay algún cambio sería mínimo.

Pero, cómo implemento el modelo vista controlador?

patrones de diseño mvc y dao

Para usar este patrón de diseño en Java, primero creas el modelo, que es una clase en java y se llama Cliente.java, esta clase sólo contiene los atributos, constructor, getters y setters.

Luego creas la vista, la clase ClienteView.java, que es un clase que va hacer de vista para el ejemplo y su función es presentar los datos del modelo.

Esta clase lo único que va hacer es imprimir los datos del modelo que es la clase Cliente.java.

Ahora creas el controlador, el controlador contiene 2 objetos el modelo, la vista así como los getters y setters para llenar las propiedades del modelo y un método(actualizarVista()) que llama a la vista que a su vez imprime las propiedades del modelo cliente.

Finalmente queda hacer un test para comprobar el patrón de diseño Modelo Vista Controlador funciona:

El patrón Data Transfer Object  (DTO/VO)

Va de la mano con el patrón de diseño DAO.

Se utiliza para transferir varios atributos entre el cliente y el servidor o viceversa, básicamente consta de 2 clases:

  • La primera es una clase java conocida como Value Object que únicamente contiene sus atributos, constructor, getters y setters, esta clase no tiene comportamiento.
  • La segunda es una clase del lado del servidor conocida como clase de negocio (en la implementación también se conoce como Business Object) es la que se encarga de obtener datos desde la base de datos y llenar la clase Value Object y enviarla al cliente, o a su vez recibir la clase desde el cliente y enviar los datos al servidor, por lo general tiene todos los métodos CRUD (create, read, update y delete).

Se implementa de la siguiente forma:

patrones de diseño en java

Se crea la clase ClienteVO.java que será la clase también conocida como Value Object:

Se crea la clase ClienteBO.java conocida también como la clase de negocio, que es la que contiene todos los métodos CRUD:

Finalmente probamos el patrón Data Transfer Object:

El patrón Data Acces Object (DAO)

El problema que viene a resolver este patrón es netamente el acceso a los datos, que básicamente tiene que ver con la gestión de diversas fuentes de datos y además abstrae la forma de acceder a ellos.

Imagínate que tienes un sistema montado en producción con una base de datos MySQL y de pronto lo debes cambiar a PostgreSQL o a cualquier otro motor de base de datos.

Eso puede ser un verdadero problema.icon

Y precisamente esto lo que soluciona este patrón, tener una aplicación que no esté ligada al acceso a datos, que si por ejemplo la parte de la vista pide encontrar los clientes con compras mensuales mayores $ 200, el DAO se encargue de traer esos datos independientemente si está en un archivo o en una base de datos.

La capa DAO contiene todos los métodos CRUD (create, read, update, delete), por lo general se tiene un DAO para cada tabla en la base de datos, y bueno la implementación se la realiza de la siguiente manera.

patron-de-diseno-data-acces-object-dao

Se crea una clase Cliente.java únicamente con sus constructores, getters y setters.

Se crea el acceso a los datos a través de una interface IClienteDao.java, aquí se declara todos los métodos para acceder a los datos.

Se implementa en la clase ClienteDaoImpl.java haciendo un implements de la interface IClienteDao.java, lo que se hace aquí, no es más que implementar cada método de la interface.

Por último se prueba el patrón DAO a través de la clase DaoDemo.java

Por lo general en un proyecto se suele unir estos tres patrones, ya que no sólo basta utilizar el MVC, puesto que la parte de acceso a datos queda un poco suelta, entonces si tu pregunta es. Si se puede utilizar los tres patrones en un proyecto? la respuesta es SI, y de echo se puede mezclar con otra infinidad de patrones que existen.

Todo dependerá del tipo de problema que quieras solucionar.

Y por último, tampoco se debe abusar con el uso de patrones, ya que utilizarlos de forma desmedida y de brindar ayuda pueden llegar a ser perjudicial para nuestro código .

Bueno espero le hayas sacado todo el provecho a esta entrada y más que todo que hayas aprendido.

Un Saludo.

Y antes de irte coméntame que te pareció la entrada y que patrón utilizas para tus proyectos?

Si te interesa seguir el tema de programación Web con Java, puedes revisar mi Curso de Programación Java Web, con JSP, Servlet y JPA donde aprenderás este y otros temas:

Opt In Image
Programación Web Full Stack
Suscríbete ahora y recibe los mejores contenidos sobre Programación Web en tu correo.

Tus datos estarán protegidos y 100% libre de Spam

Full Stack Developer, JavaScript, PHP, Java, Spring, Laravel, Vuejs, Blogger, aprendiendo y compartiendo conocimientos. Cursos de Programación Web en: https://programacionfullstack.com/

Artículos Recomendados

34 Thoughts to “Patrones de diseño en Java: MVC, DAO y DTO”

  1. rafael

    gracias por tu blog, solo una consulta, habria una posibilidad que pudieras hacer un tutorial sobre como hacer reportes java con jaspereport.

    1. Elivar Largo

      Hola Rafael, claro que si, espera los próximos post que publicaré sobre el tema. Un saludo

    2. Elivar Largo

      CÓMO CREAR REPORTES EN JAVA CON JASPERREPORTS Y JASPERSOFT STUDIO: https://www.ecodeup.com/como-crear-reportes-en-java-con-jasperreports/

  2. Juan Carlo

    Muy claro, gracias Elivar

    1. Elivar Largo

      Gracias a ti por leerme, un saludo!!

  3. Livio

    Que tal, he desarrollado en Java Se7 (swing), no he usado ningún framework, ahora me gustaría pasarme a JavaFx, ¿Que framework me recomiendas?

    1. Elivar Largo

      Todo bien Livio, no tengo experiencia con JavaFx, así que no podría decirte ni recomendarte algún framework, si de pronto te interesa programar con Java para la Web, podrías empezar usando Servlet y Jsp, aplicando algún patrón como por ejemplo MVC junto con DAO, ya que adquieras un poco de experiencia, podrías usar Spring. Espero haberte ayudado en algo. Saludos!!!

  4. krz

    Exquisito post nada que decir 😀

    1. Elivar Largo

      Me alegro que te haya gustado. Saludos!!

  5. Hola! Excelente explicación, me has quitado muchas dudas.
    Gracias.

    1. Elivar Largo

      Hola Dennis, gracias a ti por tu comentario. Un saludo!!

  6. Ignacio

    Muy bueno el tuto Elivar! muy claro y util. Saludoss

    1. Elivar Largo

      Gracias por tu comentario Ignacio.. También un saludo!!!

  7. jose

    Para usar el patrón (DAO) es necesario utilizar el patrón MVC?

    1. Elivar Largo

      No para nada, son dos patrones diferentes: DAO tiene que ver con el acceso a datos, mientras que MVC digamos que estructura el proyecto en 3 capas.
      Desde mi punto de vista DAO extiende a la capa del Modelo en MVC. Saludos..

  8. Antonio

    ¿Tienes el codigo en algún repositorio para descargar?

    1. Elivar Largo

      De momento no. Para los próximos tutoriales espero crear un repositorio.

  9. Andres

    Hola.

    Como aporte me gustaría dejar claro que el MVC no es un patrón de diseño, es un patrón arquitectónico, siempre ha existido esa confucion en cuanto al MVC.

    1. Elivar Largo

      Hola Andres, gracias por tu aporte. Un saludo

  10. Sebastian Fernandez

    Genio! Muy buenos los tuto.
    Podras hacer alguno de java web services ??

    Saludos!

    1. Elivar Largo

      Lo tomaré en cuenta para los próximos tutoriales. Un saludo

      1. HolaMundo

        Gracias por quitarle faena a mi profesora.

  11. Compartelo

    Muchas gracias, muy bien explicado

  12. Maoly

    Buen tutorial. Recomendación: Debes cuidar la ortografía

    1. Elivar Largo

      Lo tomaré cuenta

  13. Jhonatan

    Excelente información, recibe mis agradecimientos 🙂

  14. Alfonso

    Gracias, Explicas muy bién. Había mirado otros manuales que usaban muchos tecnicismos y se volvían muy complejos. En cambio este manual, explica bien, de forma concisa y sin enrredos.

    1. Elivar Largo

      Me alegro mucho que te haya sido fácil de entender.
      Saludos!!!

  15. Hola, Elivar:
    Me ha encantado el planteamiento, y ahora me gustaria plantearte una duda. Para cumplir con la encapsulación, el modelo no debería contener los filtros para garantizar los datos (casos de máximo, mínimo, alfabético, numérico,…), y si no es asi, donde podriamos ubicar esos filtros y como los relacionamos con el modelo?

    1. Elivar Largo

      Hola Miguel que tal.
      No precisamente, recordemos que la encapsulación es una característica de la programación orientada a objetos, lo que consiste en la ocultación de las propiedades de la clase simplemente con los modificadores de acceso. Aunque en Frameworks como por ejemplo MVC4 de Visual Studio de Microsofot, es posible hacerlo desde el modelo (es decir desde las clases).
      Por lo general esto es tipo de validaciones que mencionas, al menos desde mi punto de vista es mejor hacerlas desde el cliente, de manera que no recargues con peticiones al servidor.
      Si tienes una aplicación Web con Java, puedes usar algún Framework como por ejemplo JSF para la parte de la vista lo que te ayuda a validar las propiedades de cada bean de manera simple, desde la vista (no desde la clase). Adicionalmente si estás trabajando por ejemplo con JSP y servlet, puedes usar la librería apache validator, en este caso si deberías poner las restricciones dentro de los atributos de la clase.
      Saludos..

  16. UG

    Excelente, gracias por la tutoria

  17. Martin

    Excelente explicación. No entendía nada y ahora si! Gracias!
    Hay alguno de spring o hibernate?
    Gracias nuevamente!

Dejar un Comentario