El patrón de diseño del controlador frontal significa que todas las requests que provienen de un recurso en una aplicación serán manejadas por un solo controlador y luego enviadas al controlador apropiado para ese tipo de solicitud. El controlador frontal puede usar otros ayudantes para lograr el mecanismo de envío.
Diagrama UML Patrón de diseño del controlador frontal
Componentes de diseño
- Controlador: El controlador es el punto de contacto inicial para manejar todas las requests en el sistema. El controlador puede delegar en un asistente para completar la autenticación y autorización de un usuario o para iniciar la recuperación de contactos.
- Vista: Una vista representa y muestra información al cliente. La vista recupera información de un modelo. Los ayudantes respaldan las vistas encapsulando y adaptando el modelo de datos subyacente para su uso en la pantalla.
- Despachador: un despachador es responsable de la gestión y la navegación de vistas, administrando la elección de la siguiente vista para presentar al usuario y proporcionando el mecanismo para controlar el vector de este recurso.
- Ayudante: un ayudante es responsable de ayudar a una vista o controlador a completar su procesamiento. Por lo tanto, los ayudantes tienen numerosas responsabilidades, incluida la recopilación de datos requeridos por la vista y el almacenamiento de este modelo intermedio, en cuyo caso el ayudante a veces se denomina bean de valor.
Veamos un ejemplo de patrón de diseño de controlador frontal.
class TeacherView { public void display() { System.out.println("Teacher View"); } } class StudentView { public void display() { System.out.println("Student View"); } } class Dispatching { private StudentView studentView; private TeacherView teacherView; public Dispatching() { studentView = new StudentView(); teacherView = new TeacherView(); } public void dispatch(String request) { if(request.equalsIgnoreCase("Student")) { studentView.display(); } else { teacherView.display(); } } } class FrontController { private Dispatching Dispatching; public FrontController() { Dispatching = new Dispatching(); } private boolean isAuthenticUser() { System.out.println("Authentication successful."); return true; } private void trackRequest(String request) { System.out.println("Requested View: " + request); } public void dispatchRequest(String request) { trackRequest(request); if(isAuthenticUser()) { Dispatching.dispatch(request); } } } class FrontControllerPattern { public static void main(String[] args) { FrontController frontController = new FrontController(); frontController.dispatchRequest("Teacher"); frontController.dispatchRequest("Student"); } }
Producción:
Requested View: Teacher Authentication successful. Teacher View Requested View: Student Authentication successful. Student View
ventajas :
- Control centralizado: el controlador frontal maneja todas las requests 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 de subprocesos: surge un nuevo objeto de comando 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 subprocesamiento, los códigos que actúan con el comando siguen siendo seguros para subprocesos.
Desventajas:
- No es posible escalar una aplicación utilizando un controlador frontal.
- El rendimiento es mejor si se ocupa de una sola solicitud de forma única.
Este artículo es una contribución de Saket Kumar . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA