Una guía para principiantes de la arquitectura MVC en Java
Publicado: 2018-04-10Si está relacionado con la escena del desarrollo web, seguramente se habrá encontrado con el acrónimo "MVC" cientos de veces, si no más. MVC es uno de los patrones de diseño más comentados en el mundo de la programación web hoy en día, y con razón. En este artículo, lo llevaremos a través del mundo de la Arquitectura MVC. Hablaremos sobre los conceptos básicos de MVC, sus ventajas y, finalmente, un código simple que lo ayudará a comprender la implementación de MVC en Java de una manera más clara.
Tabla de contenido
¿Qué es exactamente la arquitectura MVC?
Antes de entrar en los aspectos técnicos, aclaremos algunas cosas: MVC NO es un patrón de diseño, es una forma de estructurar sus aplicaciones. En los últimos años, las aplicaciones web están utilizando ampliamente la arquitectura MVC y, por lo tanto, es natural confundirlo con un patrón de diseño exclusivo para aplicaciones web. Sin embargo, digamos que MVC se describió por primera vez en 1979, antes de la era WWW, cuando no existía el concepto de aplicaciones web. La arquitectura utilizada hoy en día para las aplicaciones web es una adaptación del patrón original.
De hecho, esta arquitectura se incluyó inicialmente en los dos principales marcos de desarrollo web: Struts y Ruby on Rails. Estos dos entornos allanaron el camino para la mayoría de los marcos web que llegaron más tarde y, por lo tanto, la popularidad de esta arquitectura siguió aumentando.
El patrón arquitectónico de MVC sigue una idea elemental: debemos separar las responsabilidades en cualquier aplicación de la siguiente manera:
- Modelo: Maneja datos y lógica de negocios.
- Ver: Presenta los datos al usuario siempre que los solicite.
- Controlador: entretiene las solicitudes de los usuarios y obtiene los recursos necesarios.
Cada uno de los componentes tiene un conjunto delimitado de tareas que garantiza el buen funcionamiento de toda la aplicación junto con una modularidad completa. Echemos un vistazo a cada uno de estos componentes con más detalle.
Controlador
El controlador es como el ama de llaves de la aplicación: realiza la coordinación entre el modelo y la vista para atender una solicitud del usuario. Las solicitudes de los usuarios se reciben como solicitudes HTTP get o post, por ejemplo, cuando el usuario hace clic en cualquier elemento de la GUI para realizar cualquier acción.
La función principal de un controlador es llamar y coordinar con el modelo para obtener los recursos necesarios para actuar. Por lo general, al recibir una solicitud del usuario, el controlador llama al modelo apropiado para la tarea en cuestión.
Modelo
El modelo es simplemente los datos para nuestra aplicación. Los datos se "modelan" de manera que son fáciles de almacenar, recuperar y editar. El modelo es cómo aplicamos las reglas a nuestros datos, lo que eventualmente representa los conceptos que maneja nuestra aplicación.
Para cualquier aplicación de software, todo se modela como datos que se pueden manejar fácilmente. ¿Qué es un usuario, un libro o un mensaje para una aplicación? Nada realmente, solo datos que deben procesarse de acuerdo con reglas específicas. Por ejemplo, la fecha no debe ser posterior a la fecha actual, el correo electrónico debe tener el formato correcto, el nombre no debe tener más de "x" caracteres, etc.
Cada vez que un usuario realiza una solicitud al controlador, se comunica con el modelo apropiado que devuelve una representación de datos de lo que el usuario solicitó. Este modelo será el mismo para una obra determinada, independientemente de cómo queramos mostrársela al usuario. Es por eso que podemos elegir cualquier vista disponible para representar los datos del modelo.
Además, un modelo también contiene la lógica para actualizar el controlador relevante siempre que haya algún cambio en los datos del modelo.

Vista
Como sugiere el nombre, la vista es responsable de representar los datos recibidos del modelo. Puede haber plantillas prediseñadas donde puede ajustar los datos, e incluso puede haber varias vistas diferentes por modelo según los requisitos.
Cualquier aplicación web está estructurada teniendo en cuenta estos tres componentes principales. Puede haber un controlador principal que sea responsable de recibir todas las solicitudes y llamar al controlador específico para acciones específicas. Comprendamos mejor el funcionamiento de una aplicación web bajo la arquitectura MVC usando un ejemplo.
Veamos un Ejemplo
Pongamos como ejemplo una papelería online. El usuario puede ver artículos, comprar, agregar artículos al carrito, agregar artículos al pedido actual o incluso agregar/eliminar artículos (si es el administrador).
Ahora, veamos qué sucederá cuando un usuario haga clic en el título "Plumas" para ver la lista de plumas.
Nuestra aplicación tendrá un controlador particular para manejar todas las consultas relacionadas con bolígrafos. Digamos que se llama “pens_controller.php”. También tendremos un modelo que almacenará los datos sobre los bolígrafos que tenemos, llamémoslo "bolígrafos_modelo.php". Finalmente, tendremos varias vistas para presentar los datos: una lista de bolígrafos, una tabla que muestra los bolígrafos, una página para editar la lista, etc.
La siguiente figura muestra el flujo completo de control desde el momento en que un usuario hace clic en "bolígrafos", hasta que el resultado se muestra frente a él:
Primero, “pens_controller.php” maneja la solicitud del usuario (1) como una solicitud GET o POST. También podemos tener un “index.php” que es el controlador central que llamará al “pens_controller” cuando sea necesario.
Luego, el controlador examina la solicitud y los parámetros y llama al modelo requerido, en este caso, "bolígrafos_modelo.php". El controlador le pide al modelo que le devuelva la lista de bolígrafos disponibles (2).
Ahora, el modelo busca en la base de datos la información necesaria (3), aplica la lógica si es necesario y devuelve los datos al controlador (4).
Luego, el controlador elige una vista apropiada (5) y presenta los datos (6 y 7). Si una solicitud proviene de un dispositivo portátil, se usará una vista adecuada para él, o si el usuario tiene un tema en particular seleccionado, se elegirá su vista, y así sucesivamente.
Cómo convertirse en un desarrollador de pila completa
Las ventajas de la arquitectura MVC
Un problema común que enfrentan los desarrolladores de aplicaciones en estos días es el soporte para diferentes tipos de dispositivos. La arquitectura MVC resuelve este problema ya que los desarrolladores pueden crear diferentes interfaces para diferentes dispositivos y, según el dispositivo desde el que se realiza la solicitud, el controlador seleccionará una vista adecuada. El modelo envía los mismos datos independientemente del dispositivo que se utilice, lo que garantiza una consistencia completa en todos los dispositivos.
La separación de MVC aísla maravillosamente la vista de la lógica empresarial. También reduce las complejidades en el diseño de aplicaciones grandes al mantener el código y el flujo de trabajo estructurados. Esto hace que el código general sea mucho más fácil de mantener, probar, depurar y reutilizar.
Una implementación simple de MVC usando Java
Tendremos los tres siguientes:
- StudentObject: el modelo.
- StudentView: ver clase para imprimir detalles en la consola.

- StudentController: un controlador que almacena datos en studentObject y actualiza StudentView en consecuencia
Paso 1: crea el modelo
Estudiante de clase pública { Cadena privada rollNo ; cadena privada nombre ; cadena pública getRollNo () { volver rollNo ; } public void setRollNo ( String rollNo ) { esto _ rolloNo = rolloNo ; } cadena pública getName () { devolver nombre ; } public void setName ( nombre de la cadena ) { esto _ nombre = nombre ; } }
El código se explica por sí mismo. Consta de funciones para obtener/establecer el número de lista y los nombres de los estudiantes. Llamémoslo "estudiante.java".
Paso 2: crear la vista
vista de estudiante de clase pública { public void imprimirDetallesEstudiante ( String nombreEstudiante , String estudianteRollNo ){ sistema _ fuera _ println ( "Estudiante: " ); sistema _ fuera _ println ( "Nombre:" + nombreEstudiante ); sistema _ fuera _ println ( "Roll No: " + estudianteRollNo ); } }
Esto es simplemente para imprimir los valores en la consola. Llamemos a esto "studentView.java".
Paso 3: crea el controlador
clase pública StudentController { modelo de estudiante privado ; Vista StudentView privada ; StudentController público ( modelo de estudiante , vista StudentView ){ esto _ modelo = modelo ; esto _ ver = ver ; } public void setNombreEstudiante ( Cadena nombre ){ modelo _ establecerNombre ( nombre ); } public String getNombreEstudiante (){ modelo de retorno . obtenerNombre (); } public void setStudentRollNo ( String rollNo ){ modelo _ setRollNo ( rollNo ); } public String getStudentRollNo (){ modelo de retorno . getRollNo (); } vista de actualización vacía pública () { ver _ imprimirDetallesEstudiante ( modelo . obtenerNombre (), modelo . obtenerRollNo ()); } }
Llame a esto "StudentController.java". Una mirada superficial le dirá que este controlador solo es responsable de llamar al modelo para obtener/establecer los datos y luego actualizar la vista.
Ahora, echemos un vistazo a cómo se une todo esto.
Paso 4: Crea el archivo Java principal
clase pública MVCPatternDemo { public static void main ( String [] args ) { //busca el registro del estudiante basado en su número de lista de la base de datos Modelo de estudiante = recuperarStudentFromDatabase (); //Crear una vista: para escribir los detalles del estudiante en la consola StudentView view = new StudentView (); Controlador StudentController = nuevo StudentController ( modelo , vista ); controlador _ actualizarVista (); //actualizar datos del modelo controlador _ setNombreEstudiante ( "Juan" ); controlador _ actualizarVista (); } Estudiante estático privado recuperarStudentFromDatabase (){ Estudiante estudiante = nuevo estudiante (); estudiante _ setName ( "Roberto" ); estudiante _ setRollNo ( "10" ); estudiante de regreso ; } }
Esto se llama "MVCPatternDemo.java". Como puede ver, obtiene los datos del alumno de la base de datos o de una función (en este caso, estamos usando una función para establecer los valores) y los envía al modelo del alumno. Luego, inicializa la vista que habíamos creado anteriormente.
Además, también inicializa nuestro controlador y lo vincula al modelo y la vista. El método updateView() es una parte del controlador que actualiza los detalles del estudiante en la consola.
Paso 5: prueba el resultado
Si todo va bien, el resultado debería ser:

Estudiante: Nombre: Roberto Número de rollo: 10 Estudiante: Nombre: Juan Número de rollo: 10
Si obtienes esto como resultado, ¡felicidades! Implementó con éxito la arquitectura MVC usando Java, aunque para una aplicación simple. Por simple que sea, esta aplicación es suficiente para demostrar los poderes de la arquitectura MVC.
15 preguntas imprescindibles de la entrevista Spring MVC
Terminando…
Después de tanto decir y hacer, es difícil enfatizar más el poder de la arquitectura MVC en cualquier aplicación web/de escritorio en estos días. Proporciona un nivel completamente nuevo de modularidad a su código, lo que lo hace mucho más legible y fácil de mantener. Por lo tanto, si desea escalar a nuevas alturas en su carrera como desarrollador de aplicaciones, obtener la arquitectura MVC y su funcionamiento debe ser su principal prioridad.
Inscríbase en cursos de ingeniería de software de las mejores universidades del mundo. Obtenga programas Executive PG, programas de certificados avanzados o programas de maestría para acelerar su carrera.
¡Déjanos un comentario y cuéntanos cómo te gusta este artículo!
