DESARROLLO DE SOFTWARE I: PATRÓN DE DISEÑO MVC EN UNA APLICACIÓN DE JAVA SWING

Visto previamente los patrones de diseño y de arquitecturas de software, ahora veamos como debería estructurarse un proyecto de Java Swing, respetando el Modelo Vista Controlador (MVC). En este post se explicará brevemente la manera en que se debería estructurar un proyecto de Java haciendo uso de su librería de interfaces Swing, respetando 3 capas base, así como complementando con subcapas adicionales para el acceso a datos (DAO "Objeto de Acceso a Datos") y otros aspectos que puedan ser necesarios para este caso.

[DESARROLLO DE SOFTWARE I] DESARROLLO DE SOFTWARE I: PATRÓN DE DISEÑO MVC EN UNA APLICACIÓN DE JAVA SWING

Cuando desarrollamos software profesional, es importante mantener una arquitectura de software y patrón de diseño limpio, en este sentido, es bueno regirse a ciertos patrones de arquitectura o diseño como en este caso lo es el MVC (https://codideep.blogspot.com/2025/05/desarrollo-de-software-i-patron-de.html), siendo que este sería para desarrollar proyectos de pequeña y mediana escala, aunque si se mantiene una estructura adecuada y bien ordenada, puede funcionar tranquilamente para proyectos de gran escala. En este sentido, veamos la manera de escructurar un proyecto sobre Java Swing, basándonos estrictamente en el Modelo Vista Controlador.

Estructura que debe llevar un proyecto Java Swing respetando el MVC

Para entender de mejor manera esta estructura, se presenta seguidamente la organización de carpetas que debería llevar un proyecto de escritorio en Java (de forma bastante visual), respetando las 3 capas del Modelo Vista Controlador.

Application/
|
|-- src/
    |-- Model/
    |   |-- Client.java
    |   |-- ClientDao.java
    |
    |-- View/
    |   |-- MainFrame.java
    |
    |-- Controller/
    |   |-- ClientController.java
    |
    |-- Main.java

Como se puede ver en la representación anterior, las carpetas estructuradas se distribuyen dentro de la carpeta principal src, dicho esto, pasemos a explicar brevemente cada una de estas carpetas y sus archivos.

En este caso se presentan archivos con un enfoque a la entidad cliente, sin embargo, se debe tener en cuenta que en cada carpeta entrarán muchos más archivos, más específicamente, pues, se crearán archivos por cada entidad del mundo real representado para el desarrollo de la aplicación (pensemos en objetos, es decir, clases que representan objetos del mundo real ¿familiar cierto?, pues sí, esto es la Programación Orientada a Objetos).

Modelo

Vemos que en esta carpeta se tienen 2 archivos (Client.java y ClientDao.java); estos archivos conforman una entidad del modelo, es decir, por cada entidad y muy cerca de decir "por cada tabla de la base de datos", existirán al menos 2 archivos dentro de esta carpeta, como los mostrados; adicionalmente, cabe aclarar que el primer archivo representa la clase con atributos que hace referencia a la entidad a la que corresponde, y, el segundo archivo maneja el acceso a datos, es decir, las consultas, registros, actualizaciones, eliminaciones, búsquedas y demás operaciones que se requieran hacer con aquella entidad y/o tabla en la base de datos.

No confundir con una capa de lógica de negocio, la mayor lógica que esta capa llevará, será las que contengan las clases Dao, para las operaciones mediante consultas (queries).

Vista

Vemos que aquí solo existe un archivo, sin embargo, esta carpeta es donde estarán todos los archivos que hereden de JFrame de Java Swing, entonces, afirmaremos que el archivo mostrado en el caso anterior sería únicamente el formulario principal, por ejemplo, el MDI dentro de una aplicación de escritorio.

Por otro lado, debemos tener en cuenta que en esta capa solo se deberán tener los Java Frame (ventanas Java Swing) y los eventos base en cada componente de Java Swing, siendo que ahí no deberá programarse procesos lógicos de ninguna manera, sino, serán solo eventos de paso para gestionar su acción en la capa de lógica de negocio, que sería el controlador (en realidad existen varias maneras; bien se podrían crear otras clases alternativas para la lógica frontal, sin embargo, por simplicidad, solo pasaremos como parámetro el componente de formulario y sus acciones serán manejadas en la capa de negocio correspondiente).

Controlador

Para este caso en particular donde aplicamos el MVC, esta capa será donde se maneje concretamente la lógica de negocio, siendo que a su vez, será la capa que haga de orquestador entre vista y modelo; además, observemos en el ejemplo de más arriba, que solo existe una clase, siendo que dicha clase implementará toda la lógica de la entidad a la que represente; dicho eso, entenderemos que existirán varias clases de tipo controlador, una para cada entidad que se represente bajo el paradigma de la programación orientada a objetos.

Un ejemplo de la estructura más detallada para un mejor entendimiento

Para tener el ejemplo más claro, veamos una extensión de lo planteado anteriormente.

Application/
|
|-- src/
    |-- Model/
    |   |-- DataBaseContext.java
    |   |-- Client/
    |   |   |-- Client.java
    |   |   |-- ClientDao.java
    |   |-- Product/
    |   |   |-- Product.java
    |   |   |-- ProductDao.java
    |
    |-- View/
    |   |-- MainFrame.java
    |   |-- Client/
    |   |   |-- FrmInsertClient.java
    |   |   |-- FrmGetAllClient.java
    |   |   |-- FrmEditClient.java
    |   |-- Product/
    |       |-- FrmInsertProduct.java
    |       |-- FrmGetAllProduct.java
    |       |-- FrmEditProduct.java
    |
    |-- Controller/
    |   |-- ClientController.java
    |   |-- ProductController.java
    |
    |-- Main.java

Observemos los puntos clave: primero nos daremos cuenta que se agregaron carpetas dentro de las capas, así como también archivos, esto se hace con la intención de mejorar el orden de la distribución de archivos, considerando que pueden existir miles de estos, así como miles de entidades a las que representarán dichos archivos, por lo que es una idea adecuada el ordenarlo en subcarpetas de las capas principales.

Por otro lado, además de los archivos agregados que se pueden explicar por sí mismos, tenemos el DataBaseContext.java, pues este archivo se encargará de realizar la conexión a la base de datos, y, se vio adecuado esclarecerlo en esta segunda versión del ejemplo, para tener una idea más completa de esta implementación.

CONCLUSIÓN

Cabe mencionar que en estos ejemplos no se puede considerar que se tienen todos los archivos y subcarpetas estructuradas de un proyecto real, ya que un proyecto de este tipo puede requerir objetos de los cuales heredar para optimizar el desarrollo, así como pueden existir clases para manejo de helpers, accesos a API's externas y mucho más, sin embargo, aquí tenemos al menos un ejemplo básico pero muy claro de lo que debemos hacer en la creación de una aplicación de escrotorio con Java Swing, respetando el MVC.

Autor: Kevin Arias

No hay comentarios:

Publicar un comentario