Logische Trennung von Backend und Frontend

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

wenco

Erfahrenes Mitglied
In letzter Zeit lese ich immer öfter von der geforderten logischen Trennung von Backend und Frontend ... aber was genau versteht ihr darunter ...?
 
Wikipedia hat einen ganz guten Artikel dazu.
Das Frontend ist quasi die Benutzerschnittstelle deiner Software, während das Backend die Programmlogik enthält. Ich persönlich stelle mir das ganze dann immer gerne im Daten-basierten Softwaremodell vor: Eine Software ist darin eine Ansammlung von Daten und Operationen auf diesen Daten. Das kann z.B. eine Menge von Datenbanken sein, und dazugehörigen Datenbankoperationen. Die Aufgabe des Frontends ist es hier, Daten vom Benutzer zu erfragen, und/oder dem Benutzer Daten zu präsentieren. Der ganze Rest wird fernab vom Benutzer im Backend ausgeführt.
Ein Frontend kann dabei lächerlich einfach sein (z.B. eine Terminalanwendung), oder aber hochkomplex, Beispiel Amazon. Die Amazon Website ist im Wesentlichen ja nur ein Frontend, für eine gigantische Amazon-Datenbank. Aber eben so komplex, dass selbst das Frontend einiges an Programmlogik enthält. Man sieht, die Grenze ist fließend.

Es bringt aber Vorteile die beiden zu trennen. Im Fall von Amazon gibt es z.B. mehrere Länder - sagen wir Deutschland (.de) und die USA (.com). Die Unterschiede sind sehr groß: Unterschiedlichste Artikel, andere Versandmethoden, gesetzl. Rahmen, usw. Deshalb bietet es sich an, hier ein eigenes Backend für jedes Land zu benutzen. Aber wäre es nicht schön, wenn beide Websites "gleich" funktionieren würden? Kein Problem, einfach das gleiche Frontend anbinden...
(Natürlich alles sehr vereinfacht ausgedrückt)

Anderes Beispiel: Warum soll ich als Programmierer eines Videoschnittprogramms mich auch um das komplette Rendering kümmern, wenn es z.B. schon so großartige Sachen wie ffmpeg gibt? Es bietet sich an hier im Wesentlichen einfach eine GUI um das Kommandozeilenprogramm "herumzubauen".

Die Unterteilung in Front- und Backend hat die gleichen Gründe, weshalb Informatiker auch Daten in Objekte Kapseln oder Bibliotheken/Module schreiben. Ein gewisser Grad an Modularität hat sich über die Zeit einfach als erstrebenswert erwiesen.

Gruß Technipion
 
Danke für die Antwort!! Die Einteilung in Frontend und Backend ist mir natürlich klar. Und ich kann mir auch eine PHYSISCHE Trennung vorstellen, beispielweise haben wir ein Online-Beratungsangebot da liegen Backend und Frontend sogar an ganz anderen Orten auf dem Server und sind auch über unterschiedliche Domains erreichbar. Das klingt für mich aber alles irgenwie nach einer physischen Trennung. Und mir ist nicht recht klar was eine logische Trennung in Abgrenzung dazu meint ... denn letztlich gibt es natürlich Verknüpfungen über die Datenbanken, IDs usw. ... aber vielleicht denke ich auch zu kompliziert !?!
 
Das klingt für mich aber alles irgenwie nach einer physischen Trennung. Und mir ist nicht recht klar was eine logische Trennung in Abgrenzung dazu meint ... denn letztlich gibt es natürlich Verknüpfungen über die Datenbanken, IDs usw.
Das stimmt schon. Wie schon gesagt, die Linie zwischen Front- und Backend ist ja meistens fließend. Gerade Legacy Software ist oft ein totaler Mischmasch.
Mit "logischer Trennung" ist wahrscheinlich gemeint, dass der Unterschied zwischen Frontend und Backend feiner herausgearbeitet werden soll. Im Idealfall kannst du natürlich für jede Softwarekomponente genau sagen, ob sie ins Front- oder ins Backend gehört (auch wenn es in der Praxis vielleicht eher so ein 70:30 Ding ist). Die ultimative logische Trennung hat man dann wohl erreicht, wenn man das Frontend in ein git-Repo packen kann und das Backend in ein anderes Repo...

Meiner Meinung nach hängt das aber alles auch immer vom Anwendungsfall, und vor allem von der eigenen Perspektive ab. Nehmen wir das ffmpeg-Beispiel von oben: ffmpeg selbst hat ja auch ein "Frontend", nämlich sein Kommandozeileninterface. Und ein Schnittprogramm kann ja auch durchaus noch andere "Backends" unterstützen, z.B. GStreamer. Und hat dann vielleicht sogar noch libx264 eingebaut. Es kann also durchaus auch mehrere Front- und Backends geben. Und wie heißt dann der Glue-Code, der unterschiedliche Front- und Backends verbindet? Midend? Mainend?
Und wenn ich meine Software vertikal erweitere, sodass sie mehrere Arten von Frontends mit mehreren Typen von Backends verbinden kann? Multi-Mid-End? Multi-Main-End? Lasagne oder doch eher Spaghetticode?
Ist Unix ein Multi-Mid-End?

Deshalb spreche ich eigentlich immer nur von Modulen :cool:
Witzig wie schnell man von Front-/Backend zu Microservices entgleitet :ROFLMAO:

Gruß Technipion
 
Scheint ein weites Feld zu sein, wenn man erstmal Ledenschaft entwickelt und letztlich ist es dann vielleicht auch eine Frage von Kontext ... also in welchem Zusammenhang man sich die Frage stellt, zB. Datenschutz:
Da findet man die Antwort, dann vermutlich auch im Ziel von Datenschutz ...
Danke hat mir weitergeholfen!!
 
Senf:
Ein "Klassiker" eines Backends ist IMO z.B. ein Grafikkarten-Treiber.
Warum?
Ein Treiber erhält Input-Daten, wandelt diese nach einem bestimmten Algorithmus um, und sendet dann Output-Daten in einem bestimmten Format an seinen Empfänger (Im Beispiel an die Hardware, an welcher Stelle des Bildschirm es ein Pixel in welcher Farbe zu malen hat).
In diesem Fall ist eine komplette Trennung zwischen Frontend (Bsp. Photoshop) und Backend (GraKa-Treiber) gegeben. (Mir ist natürlich klar, dass in diesem Fall noch einiges dazwischen liegt, und dass mein Beispiel sehr abstrakt ist)

EDIT: Ein weiterer "Klassiker" eines Backends (getrennt vom Frontend) ist eine Game-Engine (Bsp. UnrealEngine)
 
Zuletzt bearbeitet:
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…
Zurück