Front-Controller-Muster

Das Front-Controller-Muster wird verwendet, um einen zentralisierten Mechanismus zur Verarbeitung von Anfragen bereitzustellen, bei dem alle Anfragen von einem einzigen Handler verarbeitet werden. Der Handler kann Authentifizierung/Autorisierung/Protokollierung durchführen oder Anfragen verfolgen und dann die Anfrage an den entsprechenden Handler weiterleiten. Im Folgenden sind die Entitäten dieses Entwurfsmusters aufgeführt.

  • Front-Controller- Ein einzelner Handler, der alle Arten von Anfragen für eine Anwendung verarbeitet, die eine webbasierte Anwendung oder eine desktopbasierte Anwendung sein kann.
  • Dispatcher- Der Front-Controller kann ein Dispatcher-Objekt verwenden, um Anfragen an die entsprechenden konkreten Handler weiterzuleiten.
  • View- Views sind Objekte, die für Anfragen erstellt werden.

summary

Absicht

Verwendet einen zentralen Controller (oder Handler), um Client-Anfragen an die entsprechenden Handler weiterzuleiten.

Hauptprobleme gelöst

  • Löst das Problem der verstreuten Anfragenverarbeitung in Webanwendungen, indem ein einheitlicher Einstiegspunkt für die Anfragenverarbeitung bereitgestellt wird.

Anwendungsfall

  • Wenn Anfragen in einer Webanwendung zentral verwaltet und weitergeleitet werden müssen.

Implementierungsansatz

  • Front Controller: Fungiert als einzelner Einstiegspunkt für Anfragen und ist für den Empfang und die Weiterleitung von Anfragen verantwortlich.
  • view: Wird verwendet, um die Verarbeitungsergebnisse zu rendern.
  • Handler: Die Komponente, die die Anfragenverarbeitung tatsächlich ausführt.

Schlüsselcode

  • Front Controller: Enthält die Logik zur Entscheidung, an welchen Handler die Anfrage weitergeleitet wird.
  • Handler Mapping: Ordnet Anfragen den entsprechenden Handlern zu.

Anwendungsbeispiel

  • Web-FrameworkEin Beispiel ist das DispatcherServlet in Spring MVC, das als Front Controller fungiert.

Vorteile

  1. Zentralisierte Anfragenverarbeitung: Vereinfacht den Ablauf der Anfragenverarbeitung und erleichtert Verwaltung und Wartung.
  2. Reduziert Code-Duplikation: Reduziert doppelten Code in Views und Handlern durch Wiederverwendung von Controllern.
  3. Einfach zu erweitern: Beim Hinzufügen neuer Anfragenverarbeitungslogik muss nur ein neuer Handler hinzugefügt werden.

Nachteile

  • Kann zu einem Leistungsengpass werden.: Alle Anfragen laufen durch den Front Controller, was die Leistung beeinträchtigen kann.

Verwendungshinweise

  • Wenn Sie eine Webanwendung erstellen, die einen klaren Anfragenverarbeitungsablauf erfordert, sollten Sie das Front-Controller-Muster in Betracht ziehen.

Hinweise

  • Stellen Sie sicher, dass der Front Controller nicht aufgrund der zentralisierten Verarbeitung aller Anfragen zu einem Leistungsengpass wird.

Enthält mehrere Hauptrollen.

Front Controller:

  • : Fungiert als einziger Einstiegspunkt für Anfragen, ist für den Empfang von Anfragen verantwortlich und entscheidet, wie sie behandelt werden.

Handler:

  • Die Komponente, die die Anfragenverarbeitung tatsächlich ausführt.

View:

  • Wird verwendet, um die vom Handler erzeugte Antwort zu rendern.

Handler-Zuordnung (optional):

  • Ordnet Anfragen den entsprechenden Handlern zu.

Client (optional):

  • : Der Webbrowser oder API-Client, der Anfragen sendet.

Das Front-Controller-Muster hilft dabei, Webanwendungen zu erstellen, die leicht zu warten und zu erweitern sind, indem es einen zentralisierten Mechanismus zur Anfrageverarbeitung bereitstellt.


Implementierung

Wir werdenFrontController、Dispatcher erstellen,die als Front Controller bzw. Dispatcher behandelt werden.HomeViewundStudentViewStellt verschiedene Ansichten dar, die für vom Front Controller empfangene Anfragen erstellt wurden.

FrontControllerPatternDemo, unsere Demonstrationsklasse verwendetFrontController, um das Front-Controller-Entwurfsmuster zu demonstrieren.

前端控制器模式的 UML 图

Schritt 1

Ansicht erstellen.

HomeView.java

public class HomeView { public void show(){ System.out.println("Startseite wird angezeigt"); } }

StudentView.java

public class StudentView { public void show(){ System.out.println("Studentenseite wird angezeigt"); } }

Schritt 2

Erstellen Sie einen 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(); } } }

Schritt 3

Erstellen Sie einen FrontController.

FrontController.java

public class FrontController { private Dispatcher dispatcher; public FrontController(){ dispatcher = new Dispatcher(); } private boolean isAuthenticUser(){ System.out.println("Benutzer wurde erfolgreich authentifiziert."); return true; } private void trackRequest(String request){ System.out.println("Angeforderte Seite: " + request); } public void dispatchRequest(String request){ //Jede Anfrage protokollieren trackRequest(request); //Benutzer authentifizieren if(isAuthenticUser()){ dispatcher.dispatch(request); } } }

Schritt 4

VerwendungFrontControllerum das Front-Controller-Entwurfsmuster zu demonstrieren.

FrontControllerPatternDemo.java

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

Schritt 5

Führen Sie das Programm aus, Ausgabeergebnisse:

Page requested: HOME
User is authenticated successfully.
Displaying Home Page
Page requested: STUDENT
User is authenticated successfully.
Displaying Student Page
Weitere Erweiterungen