Patrón de controlador frontal

El patrón de controlador frontal (Front Controller Pattern) se utiliza para proporcionar un mecanismo centralizado de manejo de solicitudes; todas las solicitudes serán manejadas por un único controlador. Este controlador puede realizar autenticación/autorización, registro de logs o seguimiento de solicitudes, y luego enviar la solicitud al controlador correspondiente. A continuación se presentan las entidades de este patrón de diseño.

  • Controlador frontal (Front Controller)- Un único manejador que procesa todos los tipos de solicitudes de la aplicación, ya sea una aplicación basada en web o una aplicación de escritorio.
  • Despachador (Dispatcher)- El controlador frontal puede utilizar un objeto despachador para enviar las solicitudes al manejador concreto correspondiente.
  • Vista (View)- La vista es el objeto creado para la solicitud.

Resumen

Intención

Utilizar un controlador central (o procesador) para reenviar las solicitudes del cliente al manejador apropiado.

Problemas principales que resuelve

  • Resuelve el problema de la dispersión del manejo de solicitudes en aplicaciones web, proporcionando un punto de entrada unificado para el procesamiento de solicitudes.

Escenarios de uso

  • Cuando se necesita gestionar y distribuir de manera unificada las solicitudes en una aplicación web.

Método de implementación

  • Controlador frontal: actúa como el punto único de entrada de las solicitudes, encargado de recibirlas y reenviarlas.
  • Vista: se utiliza para presentar los resultados del procesamiento.
  • Manejador: el componente que realmente ejecuta el procesamiento de la solicitud.

Código clave

  • Controlador frontal: contiene la lógica para decidir a qué manejador se reenvía la solicitud.
  • Mapeo de manejadores: asigna la solicitud al manejador correspondiente.

Ejemplos de aplicación

  • Framework web: como DispatcherServlet en Spring MVC, que actúa como controlador frontal.

Ventajas

  1. Procesamiento centralizado de solicitudes: simplifica el flujo de procesamiento de solicitudes, fácil de gestionar y mantener.
  2. Reducción de código duplicado: reduce el código duplicado en vistas y manejadores mediante la reutilización del controlador.
  3. Fácil de extender: al añadir nueva lógica de procesamiento de solicitudes, solo se necesita agregar un nuevo manejador.

Desventajas

  • Puede convertirse en un cuello de botella de rendimiento: todas las solicitudes pasan a través del controlador frontal, lo que puede afectar el rendimiento.

Consejos de uso

  • Cuando se necesita construir una aplicación web con un flujo claro de procesamiento de solicitudes, considere utilizar el patrón de controlador frontal.

Notas

  • Asegúrese de que el controlador frontal no se convierta en un cuello de botella de rendimiento debido al procesamiento centralizado de todas las solicitudes.

Principales roles involucrados

Controlador frontal (Front Controller):

  • Actúa como el punto único de entrada de las solicitudes, se encarga de recibirlas y decidir cómo procesarlas.

Manejador (Handler):

  • El componente que realmente ejecuta el procesamiento de la solicitud.

Vista (View):

  • Se utiliza para presentar la respuesta generada por el manejador.

Mapeo de manejadores (Handler Mapping) (opcional):

  • Asigna la solicitud al manejador correspondiente.

Cliente (Client) (opcional):

  • El navegador web o cliente API que envía la solicitud.

El patrón de controlador frontal, al proporcionar un mecanismo centralizado de manejo de solicitudes, ayuda a construir aplicaciones web fáciles de mantener y extender.


Implementación

CrearemosFrontController、Dispatcheractuando respectivamente como el controlador frontal y el despachador.HomeViewyStudentViewRepresentan varias vistas creadas para las solicitudes recibidas por el controlador frontal.

FrontControllerPatternDemo, nuestra clase de demostración utilizaFrontControllerpara demostrar el patrón de diseño de controlador frontal.

前端控制器模式的 UML 图

Paso 1

Crear la vista.

HomeView.java

public class HomeView { public void show(){ System.out.println("Displaying Home Page"); } }

StudentView.java

public class StudentView { public void show(){ System.out.println("Displaying Student Page"); } }

Paso 2

Crear el despachador Dispatcher.

Dispatcher.java

public class Dispatcher { private StudentView studentView; private HomeView homeView; public Dispatcher(){ studentView = new StudentView(); homeView = new HomeView(); } public void dispatch(String request){ if(request.equalsIgnoreCase("STUDENT")){ studentView.show(); }else{ homeView.show(); } } }

Paso 3

Crear el controlador frontal FrontController.

FrontController.java

public class FrontController { private Dispatcher dispatcher; public FrontController(){ dispatcher = new Dispatcher(); } private boolean isAuthenticUser(){ System.out.println("User is authenticated successfully."); return true; } private void trackRequest(String request){ System.out.println("Page requested: " + request); } public void dispatchRequest(String request){ //Registrar cada solicitud trackRequest(request); //Autenticar al usuario if(isAuthenticUser()){ dispatcher.dispatch(request); } } }

Paso 4

UsarFrontControllerpara demostrar el patrón de diseño de controlador frontal.

FrontControllerPatternDemo.java

public class FrontControllerPatternDemo { public static void main(String[] args) { FrontController frontController = new FrontController(); frontController.dispatchRequest("HOME"); frontController.dispatchRequest("STUDENT"); } }

Paso 5

Ejecutar el programa y mostrar el resultado:

Page requested: HOME
User is authenticated successfully.
Displaying Home Page
Page requested: STUDENT
User is authenticated successfully.
Displaying Student Page
Otras extensiones