El patrón de diseño del software del controlador frontal se enumera en varios catálogos de patrones y está relacionado con el diseño de aplicaciones web. Es "un controlador que maneja todas las solicitudes de un sitio web ", [1] que es una estructura útil para que los desarrolladores de aplicaciones web logren la flexibilidad y la reutilización sin redundancia de código.
Instrucción
Los controladores frontales se utilizan a menudo en aplicaciones web para implementar flujos de trabajo. Si bien no es estrictamente necesario, es mucho más fácil controlar la navegación a través de un conjunto de páginas relacionadas (por ejemplo, varias páginas utilizadas en una compra en línea) desde un controlador frontal que hacer que las páginas individuales sean responsables de la navegación.
El controlador frontal puede implementarse como un objeto Java o como un script en un lenguaje de script como PHP , Raku , Python o Ruby que se llama en cada solicitud de una sesión web . Este script, por ejemplo un index.php , manejaría todas las tareas que son comunes a la aplicación o el marco, como el manejo de sesiones, el almacenamiento en caché y el filtrado de entrada. Según la solicitud específica, luego crearía instancias de más objetos y métodos de llamada para manejar las tareas particulares requeridas.
La alternativa a un controlador frontal serían los scripts individuales como login.php y order.php que luego satisfarían el tipo de solicitud. Cada script tendría que duplicar código u objetos que sean comunes a todas las tareas. Sin embargo, cada script también puede tener más flexibilidad para implementar la tarea particular requerida.
Ejemplos de
Varios marcos de aplicaciones de nivel web implementan el patrón de controlador frontal, entre ellos:
- Apache Struts
- ASP.NET MVC
- Marco de Cairngorm en Adobe Flex
- Marcos Cro [1] o Bailador [2] en Raku
- Drupal
- Marcos MVC escritos en PHP . Por ejemplo, Yii , CakePHP , Laravel , Symfony , CodeIgniter y Laminas
- Marco de primavera [2]
- Yesod (marco web) escrito en Haskell
Implementación
Para comprender mejor el patrón del controlador frontal, hay un ejemplo para implementar el controlador frontal en Java. [3] Se puede definir en 3 componentes:
- Mapeo XML : archivos que mapean solicitudes a la clase que manejará el procesamiento de solicitudes.
- Procesador de solicitudes: se utiliza para tratar el procesamiento de solicitudes (y modificar o recuperar el modelo apropiado).
- Administrador de flujo: primero obtenga la solicitud y el resultado del procesamiento, luego determine qué se mostrará en la página siguiente.
Participantes y responsabilidades
Controlador | Despachador | Ayudante | Vista |
---|---|---|---|
El controlador es una entrada para que los usuarios manejen solicitudes en el sistema. Se da cuenta de la autenticación desempeñando el papel de delegar ayudante o iniciar la recuperación de contactos. | Los despachadores se pueden utilizar para navegar y administrar la salida de la vista. Los usuarios recibirán la siguiente vista determinada por el despachador. Los despachadores también son flexibles: pueden encapsularse dentro del controlador directamente o separarse a otro componente. El despachador proporciona una vista estática junto con el mecanismo dinámico. También utiliza el objeto RequestDispatcher (admitido en la especificación del servlet) y encapsula algunos procesos adicionales. | Un ayudante ayuda a la vista o al controlador a procesar. Por lo tanto, el ayudante puede lograr varios objetivos. En el lado de la vista, el ayudante recopila datos y, a veces, los almacena como una estación intermedia. Antes del proceso de view, los ayudantes sirven para adaptar el modelo de datos. Los ayudantes realizan ciertos procesos previos, como formatear los datos en contenido web o proporcionar acceso directo a los datos sin procesar. Varios ayudantes pueden colaborar con una vista para la mayoría de las condiciones. Se implementan como componentes JavaBeans en JSP 1.0+ y etiquetas personalizadas en JSP 1.1+. Además, un ayudante también funciona como un transformador que se utiliza para adaptar y convertir el modelo al formato adecuado. | Con la colaboración de ayudantes, view muestra información al cliente. Procesa datos de un modelo. La vista se mostrará si el procesamiento se realiza correctamente y viceversa. |
Implementación de demostración en Java
Aquí hay parte de un código de demostración para implementar el controlador frontal. [4]
private void doProcess ( solicitud HttpServletRequest , Respuesta HttpServletResponse ) lanza IOException , ServletException { ... prueba { getRequestProcessor (). processRequest ( solicitud ); getScreenFlowManager (). forwardToNextScreen ( solicitud , respuesta ); } atrapar ( Lanzable ex ) { String className = ex . getClass (). getName (); nextScreen = getScreenFlowManager (). getExceptionScreen ( ex ); // Pon la excepción en la solicitud solicitud . setAttribute ( "javax.servlet.jsp.jspException" , ex ); if ( nextScreen == null ) { // Enviar a la pantalla de error general ej . printStackTrace (); lanzar una nueva ServletException ( " MainServlet : excepción desconocida:" + className ); } }
Beneficios y pasivos
Hay tres ventajas de utilizar el patrón de controlador frontal. [5]
- Control centralizado . El controlador frontal maneja todas las solicitudes a la aplicación web . Esta implementación de control centralizado que evita el uso de múltiples controladores es deseable para hacer cumplir las políticas de toda la aplicación, como el seguimiento y la seguridad de los usuarios.
- Seguridad del hilo . Un nuevo objeto de comando surge cuando se recibe una nueva solicitud y los objetos de comando no están destinados a ser seguros para subprocesos. Por lo tanto, estará seguro en las clases de comando. Aunque la seguridad no está garantizada cuando se recopilan problemas de subprocesos, los códigos que actúan con comando siguen siendo seguros para subprocesos.
- Configurabilidad . Dado que solo se necesita un controlador frontal en la aplicación web, la configuración de la implementación de las aplicaciones web se simplifica en gran medida. El controlador realiza el resto del despacho para que no sea necesario cambiar nada antes de agregar nuevos comandos con comandos dinámicos.
En términos de responsabilidad, los controladores frontales que determinan las siguientes actividades mediante la búsqueda en la base de datos o en los documentos XML, pueden disminuir el rendimiento. Y la implementación del controlador frontal en los sistemas existentes siempre implica la sustitución de los actuales, lo que hace que sea más difícil para los principiantes empezar.
Relación con el patrón MVC
- Para mejorar la confiabilidad y el mantenimiento del sistema, se deben evitar y centralizar los códigos duplicados cuando tienen la misma lógica común en todo el sistema.
- Es mejor manejar los datos de la aplicación en un solo lugar, por lo que no será necesario duplicar el código de recuperación de la base de datos.
- Los diferentes roles en el patrón MVC deben separarse para aumentar la capacidad de prueba, lo que también es cierto para la parte del controlador en el patrón MVC.
Comparación
El controlador de página es una alternativa al controlador frontal en el modelo MVC.
Controlador de página | Controlador frontal | |
---|---|---|
Clase base | La clase base es necesaria y crecerá simultáneamente con el desarrollo de la aplicación. | La centralización de la resolución de todas las solicitudes es más fácil de modificar que el método de clase base. |
Seguridad | Baja seguridad porque varios objetos reaccionan de manera diferente sin coherencia. | Elevado. El controlador se implementa de manera coordinada, lo que hace que la aplicación sea más segura. |
Página lógica | Objeto único en cada página lógica. | Solo un controlador maneja todas las solicitudes. |
Complejidad | Bajo | Elevado |
Ver también
- Patrón de diseño (informática) .
- Patrón de mediador (nota: el patrón de controlador frontal es un tipo especializado de patrón de mediador)
Referencias
- ^ Fowler, Martin . "Controlador frontal" . Consultado el 26 de septiembre de 2017 .
- ^ "Marco Web MVC" . Documentación de referencia de Spring Framework . Software fundamental . Consultado el 26 de septiembre de 2017 .
- ^ "Patrón de controlador frontal" .
- ^ "Código de demostración en Java" . Archivado desde el original el 19 de abril de 2012.CS1 maint: bot: estado de URL original desconocido ( enlace )
- ^ "Beneficios de usar el controlador frontal" .
Notas
- Alur, Deepak; John Crup; Dan Malks (2003). Patrones centrales de J2EE, mejores prácticas y estrategias de diseño, 2ª ed . Prensa de Sun Microsystems. págs. 650pp. ISBN 0-13-142246-4.
- Fowler, Martin (2003). Patrones de arquitectura de aplicaciones empresariales . págs. 560pp. ISBN 978-0-321-12742-6.
enlaces externos
- Front Man ™ de Bear Bibeault , una implementación ligera de Java.