Modèle de contrôleur frontal

Le modèle de contrôleur frontal est utilisé pour fournir un mécanisme centralisé de gestion des requêtes, où toutes les requêtes sont traitées par un seul gestionnaire. Le gestionnaire peut effectuer l'authentification/l'autorisation/la journalisation, ou suivre les requêtes, puis transmettre la requête au gestionnaire correspondant. Voici les entités de ce modèle de conception.

  • Contrôleur frontal- Un gestionnaire unique qui traite tous les types de requêtes pour une application, qu'il s'agisse d'une application web ou d'une application de bureau.
  • Répartiteur- Le contrôleur frontal peut utiliser un objet répartiteur pour distribuer les requêtes aux gestionnaires concrets correspondants.
  • Vue- Les vues sont des objets créés pour les requêtes.

summary

intention

Utilise un contrôleur central (ou gestionnaire) pour transmettre les requêtes client aux gestionnaires appropriés.

Principaux problèmes résolus

  • Résout le problème de la gestion dispersée des requêtes dans les applications web, en fournissant un point d'entrée unifié pour le traitement des requêtes.

Cas d'utilisation

  • Lorsque les requêtes doivent être gérées et distribuées de manière centralisée dans une application web.

Approche d'implémentation

  • Contrôleur frontal: agit comme le point d'entrée unique pour les requêtes, responsable de la réception et de la transmission des requêtes.
  • vue: utilisée pour afficher les résultats du traitement.
  • Gestionnaire: le composant qui exécute réellement le traitement des requêtes.

Code clé

  • Contrôleur frontal: contient la logique pour décider vers quel gestionnaire transmettre la requête.
  • Mappage de gestionnaires: associe les requêtes aux gestionnaires correspondants.

Exemple d'application

  • Framework WebUn exemple est le DispatcherServlet dans Spring MVC, qui agit comme le contrôleur frontal.

Avantages

  1. Gestion centralisée des requêtes: simplifie le flux de traitement des requêtes, ce qui facilite la gestion et la maintenance.
  2. Réduire la duplication de code: Réduit la duplication de code dans les vues et les gestionnaires en réutilisant les contrôleurs.
  3. Facile à étendre: Lors de l'ajout d'une nouvelle logique de traitement des requêtes, il suffit d'ajouter un nouveau gestionnaire.

Inconvénients

  • Peut devenir un goulot d'étranglement de performance.: Toutes les requêtes passent par le contrôleur frontal, ce qui peut affecter les performances.

Suggestions d'utilisation

  • Lors de la construction d'une application web qui nécessite un flux clair de traitement des requêtes, envisagez d'utiliser le motif Contrôleur frontal.

Notes

  • Assurez-vous que le contrôleur frontal ne devienne pas un goulot d'étranglement de performance en raison de la gestion centralisée de toutes les requêtes.

Contient plusieurs rôles principaux.

Contrôleur frontal:

  • : Agit comme le point d'entrée unique des requêtes, chargé de recevoir les requêtes et de décider comment les traiter.

Gestionnaire:

  • Le composant qui exécute réellement le traitement des requêtes.

Vue:

  • Utilisé pour rendre la réponse générée par le gestionnaire.

Mappage des gestionnaires (facultatif):

  • Associe les requêtes aux gestionnaires correspondants.

Client (facultatif):

  • : Le navigateur web ou le client API qui émet des requêtes.

Le patron de contrôleur frontal aide à construire des applications web faciles à maintenir et à étendre en fournissant un mécanisme centralisé de traitement des requêtes.


Implémentation

Nous allons créerFrontController、DispatcherTraités respectivement comme le contrôleur frontal et le répartiteur.HomeViewetStudentViewReprésente diverses vues créées pour les requêtes reçues par le contrôleur frontal.

FrontControllerPatternDemo, notre classe de démonstration utiliseFrontControllerpour démontrer le patron de conception du contrôleur frontal.

前端控制器模式的 UML 图

Étape 1

Créer la vue.

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("Affichage de la page étudiant"); } }

Étape 2

Créer un 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(); } } }

Étape 3

Créer un FrontController.

FrontController.java

public class FrontController { private Dispatcher dispatcher; public FrontController(){ dispatcher = new Dispatcher(); } private boolean isAuthenticUser(){ System.out.println("L'utilisateur est authentifié avec succès."); return true; } private void trackRequest(String request){ System.out.println("Page demandée : " + request); } public void dispatchRequest(String request){ //Journaliser chaque requête trackRequest(request); //Authentifier les utilisateurs if(isAuthenticUser()){ dispatcher.dispatch(request); } } }

Étape 4

UtilisationFrontControllerpour démontrer le modèle de conception du contrôleur frontal.

FrontControllerPatternDemo.java

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

Étape 5

Exécutez le programme, résultats de sortie:

Page requested: HOME
User is authenticated successfully.
Displaying Home Page
Page requested: STUDENT
User is authenticated successfully.
Displaying Student Page
autres extensions