Muster „Back-Ends für Front-Ends“Backends for Frontends pattern

Erstellen Sie separate Back-End-Dienste zur Nutzung durch bestimmte Front-End-Anwendungen oder -Schnittstellen.Create separate backend services to be consumed by specific frontend applications or interfaces. Dieses Muster ist hilfreich, wenn Sie vermeiden möchten, dass ein einzelnes Back-End für mehrere Schnittstellen angepasst werden muss.This pattern is useful when you want to avoid customizing a single backend for multiple interfaces. Dieses Muster wurde von Sam Newman erstmals beschrieben.This pattern was first described by Sam Newman.

Kontext und ProblemContext and problem

Eine Anwendung kann ursprünglich auf eine Desktop-Webbenutzeroberfläche ausgerichtet sein.An application may initially be targeted at a desktop web UI. Normalerweise wird ein Back-End-Dienst parallel entwickelt, mit dem die für die Benutzeroberfläche benötigten Features bereitgestellt werden.Typically, a backend service is developed in parallel that provides the features needed for that UI. Wenn die Benutzerbasis der Anwendung wächst, wird eine mobile Anwendung entwickelt, die mit demselben Back-End interagieren muss.As the application's user base grows, a mobile application is developed that must interact with the same backend. Der Back-End-Dienst wird zu einem Back-End für allgemeine Zwecke, mit dem die Anforderungen der Desktopbenutzeroberfläche und mobilen Benutzeroberfläche erfüllt werden.The backend service becomes a general-purpose backend, serving the requirements of both the desktop and mobile interfaces.

Die Funktionen eines mobilen Geräts unterscheiden sich aufgrund von Bildschirmgröße, Leistung und Anzeigebeschränkungen aber erheblich von einem Desktopbrowser.But the capabilities of a mobile device differ significantly from a desktop browser, in terms of screen size, performance, and display limitations. Die Anforderungen für das Back-End einer mobilen Anwendung unterscheiden sich von der Desktop-Webbenutzeroberfläche.As a result, the requirements for a mobile application backend differ from the desktop web UI.

Diese Unterschiede führen zu konkurrierenden Anforderungen für das Back-End.These differences result in competing requirements for the backend. Für das Back-End sind regelmäßige und signifikante Änderungen erforderlich, damit es sowohl für die Desktop-Webbenutzeroberfläche als auch für die mobile Anwendung genutzt werden kann.The backend requires regular and significant changes to serve both the desktop web UI and the mobile application. Häufig arbeiten separate Benutzeroberflächenteams an den einzelnen Front-Ends, sodass das Back-End im Entwicklungsprozess zu einem Engpass wird.Often, separate interface teams work on each frontend, causing the backend to become a bottleneck in the development process. In Konflikt stehende Updateanforderungen und die Notwendigkeit, dass der Dienst für beide Front-Ends betriebsbereit gehalten werden muss, kann dazu führen, dass für eine einzelne bereitstellbare Ressource hoher Aufwand entsteht.Conflicting update requirements, and the need to keep the service working for both frontends, can result in spending a lot of effort on a single deployable resource.

Kontext- und Problemdiagramm des Musters „Back-Ends für Front-Ends“

Da die Entwicklungsaktivitäten auf den Back-End-Dienst ausgerichtet sind, kann ggf. ein separates Team zusammengestellt werden, um das Back-End zu verwalten und zu warten.As the development activity focuses on the backend service, a separate team may be created to manage and maintain the backend. Dies führt letztendlich zu einer Trennung zwischen den Teams für die Entwicklung der Benutzeroberfläche und des Back-Ends, und das Back-End-Team muss die konkurrierenden Anforderungen der verschiedenen Benutzeroberflächenteams ausgleichen.Ultimately, this results in a disconnect between the interface and backend development teams, placing a burden on the backend team to balance the competing requirements of the different UI teams. Wenn ein Benutzeroberflächenteam Änderungen des Back-Ends fordert, müssen diese Änderungen von anderen Benutzeroberflächenteams überprüft werden, bevor sie in das Back-End integriert werden können.When one interface team requires changes to the backend, those changes must be validated with other interface teams before they can be integrated into the backend.

LösungSolution

Erstellen Sie ein Back-End pro Benutzeroberfläche.Create one backend per user interface. Optimieren Sie das Verhalten und die Leistung jedes Back-Ends, um die Anforderungen der Front-End-Umgebung bestmöglich zu erfüllen, ohne sich Gedanken darüber machen zu müssen, dass andere Front-End-Umgebungen betroffen sind.Fine-tune the behavior and performance of each backend to best match the needs of the frontend environment, without worrying about affecting other frontend experiences.

Diagramm des Musters „Back-Ends für Front-Ends“

Da jedes Back-End spezifisch für eine Benutzeroberfläche gilt, kann es für diese Schnittstelle optimiert werden.Because each backend is specific to one interface, it can be optimized for that interface. Das Ergebnis ist, dass es kleiner, weniger komplex und meist auch schneller als ein generisches Back-End ist, mit dem versucht wird, die Anforderungen aller Benutzeroberflächen zu erfüllen.As a result, it will be smaller, less complex, and likely faster than a generic backend that tries to satisfy the requirements for all interfaces. Jedes Benutzeroberflächenteam kann das eigene Back-End selbst steuern und ist nicht von einem zentralen Back-End-Entwicklungsteam abhängig.Each interface team has autonomy to control their own backend and doesn't rely on a centralized backend development team. So kann das Benutzeroberflächenteam in den Bereichen Sprachwahl, Release-Rhythmus, Priorisierung der Workload und Featureintegration auf seinem Back-End jeweils flexibel vorgehen.This gives the interface team flexibility in language selection, release cadence, prioritization of workload, and feature integration in their backend.

Weitere Informationen finden Sie unter Muster: Back-Ends für Front-Ends.For more information, see Pattern: Backends For Frontends.

Probleme und ÜberlegungenIssues and considerations

  • Berücksichtigen Sie, wie viele Back-Ends bereitgestellt werden sollen.Consider how many backends to deploy.
  • Wenn verschiedene Oberflächen (z.B. mobile Clients) die gleichen Anforderungen senden, sollten Sie prüfen, ob die Implementierung eines Back-Ends für jede Oberfläche erforderlich ist oder ob ein einzelnes Back-End ausreicht.If different interfaces (such as mobile clients) will make the same requests, consider whether it is necessary to implement a backend for each interface, or if a single backend will suffice.
  • Die Codeduplizierung über Dienste hinweg ist sehr wahrscheinlich, wenn dieses Muster implementiert wird.Code duplication across services is highly likely when implementing this pattern.
  • Auf das Front-End ausgerichtete Back-End-Dienste sollten nur clientspezifische Logik und das entsprechende Verhalten aufweisen.Frontend-focused backend services should only contain client-specific logic and behavior. Die allgemeine Geschäftslogik und andere globale Features sollten an einem anderen Ort Ihrer Anwendung verwaltet werden.General business logic and other global features should be managed elsewhere in your application.
  • Überlegen Sie, wie dieses Muster in Bezug auf die Zuständigkeiten eines Entwicklungsteams widergespiegelt wird.Think about how this pattern might be reflected in the responsibilities of a development team.
  • Machen Sie sich Gedanken darüber, wie lange es dauert, dieses Muster zu implementieren.Consider how long it will take to implement this pattern. Führt der Aufwand für die Erstellung der neuen Back-Ends zu „technischen Schulden“, während Sie weiterhin das vorhandene generische Back-End unterstützen?Will the effort of building the new backends incur technical debt, while you continue to support the existing generic backend?

Verwendung dieses MustersWhen to use this pattern

Verwenden Sie dieses Muster in folgenden Fällen:Use this pattern when:

  • Ein freigegebener bzw. universeller Back-End-Dienst muss gewartet werden, und hierfür fällt ein erheblicher Mehraufwand bei der Entwicklung an.A shared or general purpose backend service must be maintained with significant development overhead.
  • Sie möchten das Back-End für die Anforderungen bestimmter Clientoberfläche optimieren.You want to optimize the backend for the requirements of specific client interfaces.
  • Anpassungen werden für ein Allzweck-Back-End vorgenommen, um mehrere Oberflächen abzudecken.Customizations are made to a general-purpose backend to accommodate multiple interfaces.
  • Eine Alternativsprache ist für das Back-End einer anderen Benutzeroberfläche besser geeignet.An alternative language is better suited for the backend of a different user interface.

Dieses Muster ist in folgenden Fällen unter Umständen nicht geeignet:This pattern may not be suitable:

  • Wenn Benutzeroberflächen die gleichen oder ähnliche Anforderungen an das Back-End senden.When interfaces make the same or similar requests to the backend.
  • Wenn nur eine Benutzeroberfläche für die Interaktion mit dem Back-End verwendet wird.When only one interface is used to interact with the backend.