Saltar al contenido

¿El controlador pertenece a la capa de presentación?

Hacemos una verificación profunda cada noticia de nuestra web con el objetivo de mostrarte en todo momento la información certera y actual.

Solución:

La capa de presentación contiene vistas. y controladores
No debe confundir una arquitectura MVC con una arquitectura multinivel/capa (especialmente una arquitectura de 3 niveles). La mayoría de las veces, Model/View/Controller no es el diseño principal de una aplicación web, es solo un subconjunto de una arquitectura de varios niveles/capas.

Eche un vistazo a este esquema demasiado simplificado (podría tener los DAO en una capa de acceso a datos dedicada, pero esto no es importante en esta publicación):

Capas simplificadas

Spring MVC es un marco de presentación : se trata de controladores y vistas. Pero, ¿por qué la “M” en Spring MVC? Solo porque, como muchos otros marcos de presentación, trata naturalmente con una representación de un modelo/entidad (“M”). Esta representación es la que se usa en sus controladores, se muestra en sus vistas, se envía en sus formularios, etc. Es por eso que el marco se llama Spring MVC, incluso si el modelo/entidad no es parte de la capa de presentación.

Creo que es un buen nombre para este Framework, porque realmente está orientado a “MVC”. De hecho, la representación de un modelo/entidad puede ser:

  • directo: el marco maneja directamente el modelo/objeto de entidad
  • indirecto: el marco maneja un objeto de formulario o DTO, que contiene información relacionada con una o varias entidades

La recomendación de Spring es usar directamente el objeto modelo/entidad (“M”):

Código comercial reutilizable, sin necesidad de duplicación. Utilice objetos comerciales existentes como comandos o objetos de formulario en lugar de duplicarlos para ampliar una clase base de marco particular.

Es por eso que digo que el marco está muy orientado a “MVC”, en comparación con otros, como Struts, donde tienes que usar diferentes objetos de formulario.

Algunos enlaces interesantes:

  • Comparación entre la arquitectura Multitier y MVC, de Wikipedia
  • Esta publicación de blog sobre la arquitectura de 3 niveles en ASP.NET
  • Esta imagen de blog de una arquitectura de 3 niveles
  • Capítulo DispatcherServlet de la documentación de Spring

El controlador controla la lógica de la capa de presentación. Para todo el código comercial, los casos de uso transaccional, la persistencia, etc., normalmente se delega a una capa de servicio.

Una forma típica de hacerlo es implementar servicios transaccionales como spring beans e inyectar esos spring beans en los controladores. Caso de uso típico: crear un nuevo producto:

  1. El controlador recibe un bean de comando del navegador
  2. Valida que todos los datos requeridos estén presentes, y si no, vuelve a mostrar la página de creación del producto con mensajes de error.
  3. Llama a un bean de servicio para crear el producto.
  4. El bean de servicio se ejecuta en una transacción. Obtiene la categoría del producto de la base de datos, adjunta el producto a su categoría, calcula el precio del producto en función de las estrategias de precios actuales, envía un mensaje JMS a una aplicación externa y devuelve el ID del producto creado.
  5. El controlador redirige a la página de detalles del producto, utilizando la ID del producto creado como parámetro de URL.

Depende en gran medida del sabor de MVC que esté usando y del entorno en el que lo esté usando.

Por ejemplo, ASP.NET MVC es completamente un patrón de interfaz de usuario, por lo que las tres partes forman parte de la presentación.

Sin embargo, en la mayoría de las implementaciones de MVC, el controlador interactúa con el usuario y, por lo tanto, es parte de la capa de la interfaz de usuario. Puede manejar pulsaciones de botones y entradas de teclado… pero en muchos casos, el controlador también es responsable de conectar el modelo y la vista.

La única verdad universal es que NO debería estar haciendo lógica comercial en el controlador si no puede evitarlo. El lugar donde existe la lógica empresarial depende de muchos factores. Puede ser parte del modelo en algunas implementaciones, o puede ser su propia capa separada fuera de MVC

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *