Warum verwenden große Websites unterschiedliche Sprachen für das Backend und das Frontend?

26

Mein Verständnis von kleinen MVC-Anwendungen ist, dass Sie das Front-End haben, das sich mit HTML, JS, jQuery usw. befasst, und das Back-End, das aus Ihren Controllern und Modellen besteht.

Wenn ich jedoch mit Entwicklern großer Unternehmen spreche, erwähnen sie oft, dass sie eine Front-End-Schicht und eine Back-End-Schicht haben. Manchmal höre ich vielleicht, dass sie ein Frontend mit C # und ein Backend mit Java haben. Warum sollte ein Unternehmen ein Backend und Frontend in verschiedenen Sprachen wünschen? Hilft dies, die große Website besser zu skalieren?

Wenn Leute sagen, dass ihr Frontend in C # erstellt wurde, bedeutet dies, dass sie ein Framework für das Frontend (wie .NET) und ein zusätzliches Framework für das Backend (wie Spring) verwenden? Oder bedeutet es etwas ganz anderes?

user1431282
quelle
6
Warum solltest du überhaupt etwas in derselben Sprache haben wollen?!? Sprachen sind unterschiedlich, alle sind für unterschiedliche Zwecke abgestimmt. Eine "Allzwecksprache" gibt es nicht.
SK-logic
33
@ SK-logic: Sie können sich keinen Vorteil vorstellen, eine einzige Bewerbung in einer einzigen Sprache zu schreiben?
back2dos
10
@ back2dos, nein, ich sehe keinen einzigen Vorteil. Es ist zu dumm, zu versuchen, eine Sprache für etwas zu verwenden, für das sie nicht entwickelt wurde. Es ist dumm, eine Sprache in einem Bereich zu verwenden, in dem es eine andere gibt, die viel besser passt.
SK-logic
25
@ SK-logic: Mit diesem Argument ist es dumm, zunächst eine populäre Sprache zu verwenden, denn für jede Domain gibt es ein existierendes DSL, das nur für diesen Bereich entwickelt wurde. Aber ich glaube, Sie wissen das, also vermute ich, dass Sie heute nur in ausgelassener Stimmung sind, oder Sie würden von dieser Ebene der Verallgemeinerung und des emotionalen Ausbruchs Abstand nehmen.
back2dos
3
Teams / Manager und Plattformen werden die Sprachauswahl vor einer bestimmten Aufgabe vorantreiben. C # ASP.NET wurde als Web-Front-End für eine ältere Java-Back-End-Anwendung ausgewählt, nicht weil diese Web-App etwas "so Einzigartiges" hatte, dass sie perfekt in den Windows-Stack passte.
JeffO

Antworten:

67

"Front-End" und "Back-End" können insbesondere in Unternehmensanwendungen zu Nebeln werden. "Front-End" kann die Benutzeroberfläche oder die gesamte Anwendung sein. "Back-End" kann verwendet werden, um die Interna zu bezeichnen, oder es kann sich um die Datenbank oder externe Dienste handeln, die verwendet werden. Was die Begriffe bedeuten, hängt oft ganz davon ab, mit wem Sie sprechen. Also hast du vielleicht gefragt "Hey, was meinst du damit?"

Wenn Sie in die Entwicklung großer Unternehmen einsteigen, werden Sie viele, viele Teams haben , die viele, viele Codes schreiben . Diese Teams werden sich in verschiedenen Sprachen und anhand verschiedener Paradigmen von verschiedenen Standorten aus entwickeln. Ein Teil dieses Codes muss zusammenarbeiten und ein Großteil nicht.

Ich arbeite für eine große Bank. Mein Team entwickelt unsere Anwendung in C #. Alles davon. Wir verwenden jedoch Webservices, die größtenteils in Java geschrieben sind, und diese Services kommunizieren mit anderen Services, die mit anderen Services kommunizieren, die die Kontodaten zu und von den entsprechenden Datenspeichern abrufen, und die wissen, welche Sprachen mit diesen verwendet werden.

Kurzfassung: Die Leute benutzen die Werkzeuge, die die Arbeit erledigen.

Anthony Pegram
quelle
1
Jetzt möchte ich einen in Malbolge geschriebenen öffentlichen Webdienst erstellen, der etwas wirklich Einfaches / Allgemeines leistet, nur damit jemand sagen kann, dass sein am weitesten entferntes Backend es verwendet.
Izkata
Wie kann dieser Sprachkombinationseffekt erzielt werden?
Abgebrochen
17

Ich denke, Sie müssen die Frage etwas erweitern: Warum verwenden große Softwareprojekte mehr als eine Programmiersprache?

Es gibt viele mögliche Antworten, die bemerkenswertesten sind:

  • Große Anwendungen bestehen aus vielen relativ unabhängigen Teilen. Häufig wird jedes Teil von einem anderen Team oder sogar einem anderen externen Auftragnehmer erstellt. Der Vorteil, mit dem besten Angebot zu gehen, ist oft größer als der Vorteil, dass alles in derselben Sprache gesprochen wird.
  • Sprachen kommen und gehen und manchmal überlebt eine Komponente eines großen Systems das Ökosystem. Ein Beispiel aus der Microsoft-Welt ist, wie viele Unternehmen C # für alle neuen Projekte verwenden, aber immer noch über eine beachtliche VB-Codebasis verfügen. Die Kosten für das Umschreiben eines Projekts, nur um es in der neuesten Programmiersprache auszuführen, sind praktisch nie gerechtfertigt.
  • Schnittstelle zu Komponenten von Drittanbietern. Wenn Ihr C # -Ökosystem eine bestimmte Aufgabe ausführen muss, für die nur Java-Lösungen vorhanden sind, haben Sie zwei Möglichkeiten: Implementieren Sie die Lösung selbst oder verwenden Sie die Java-Lösung und entwickeln Sie ein wenig Kleber, um sie in Ihr System zu integrieren. Letzteres ist für jede nicht triviale Aufgabe fast immer billiger.

Leistungsüberlegungen sind praktisch nie der Grund, außer in äußerst leistungskritischen Anwendungen wie dem Hochfrequenzhandel. In diesen Bereichen kann es vorteilhaft sein, die kritische Core-Engine in einer Sprache mit besserer Laufzeitleistung zu schreiben (z. B. C ++). aber die unterstützenden Systeme (UI, Reporting, etc.) in etwas übergeordnetem wie Java oder C #.

tdammers
quelle
6

Es ist relativ in einem großen Unternehmen.
In meiner Firma ist der Stapel ungefähr

(html/javascript)--> (JSP on Tomcat and Java based WebCMS) -> (.Net SOA)  

Für das Webentwicklungsteam ist das Frontend HTML / JS und das Backend Java. Für das Unternehmen ist das Frontend Java und das Backend .Net.

Tatsächlich muss die .Net-Schicht mit einer COBOL / UNIX-Anwendung für Abrechnungen und Forderungen zusammenarbeiten. In dieser Perspektive ist .Net das Frontend und COBOL das Backend.

Und ja, wie andere bereits erwähnt haben, arbeiten Teams von UX-Designern, HTML / JS-Entwicklern, Java-Entwicklern, Web-Middleware-Entwicklern, .NET-Entwicklern, SQL-Entwicklern und COBOL-Entwicklern an jedem Teil des Stapels.

Tatsächlich sind es in jedem ausreichend großen Unternehmen Schildkröten, die den ganzen Weg nach unten gehen.

softveda
quelle
+1 für die Schildkröten. Ich bin nur froh, dass ich nicht die Schildkröte bin, deren Frontend die Assemblersprache ist.
kmote
5

Verwirrende Semantik

Es ist eine semantische Frage. Wenn jemand von einem .NET-Front-End- oder Java-Front-End-Entwickler spricht, spricht er normalerweise von der Person, die viel über die Vorlagensprachen und möglicherweise Frameworks weiß, die niemals wieder verwendet werden sollten, wie Webformulare, mit denen versucht wurde, die zu verbergen Dinge von App-Entwicklern über eine http-Pinnwand (dh "Web-Entwicklung") zu werfen, von denen angenommen wurde, dass sie nichts über diesen ganzen Mist erfahren wollten oder wollten. Im Fall von .NET und Java bin ich mir nicht sicher, aber ich konnte nur vermuten, dass im MVC-Sinne Java für alle Geschäftsmodelle zuständig ist und .NET alles andere erledigt, was besser beschrieben werden könnte als "Middle-Tier", aber es ist immer noch alles Server-seitig.

Die eigentliche Trennung besteht darin, was auf dem Server und was auf dem Client oder Browser geschieht. Sie können das Erstellen des HTML-Codes, der an das Front-End gesendet werden soll, oder das Darstellen des Front-End-Codes mit "Front-End-Entwicklung" kombinieren. Daher bevorzuge ich die Verwendung der Begriffe "Client" und "Server" anstelle von "Front-End" und "Back-End". (normalerweise clientseitige Arbeit).

Clientseitige Sprachen

Der Grund, warum wir den gleichen Satz von Sprachen im Browser verwenden, ist, dass der Browser auf der empfangenden Seite ist und zum größten Teil (es gab jetzt größtenteils toten Widerstand von Microsoft und Adobe), dass niemand drei verschicken muss Verschiedene Versionen derselben Client-Seite, um jeden potenziellen Kunden zufriedenzustellen, oder es muss ein proprietäres Plug-In installiert sein, damit das Web funktioniert. Außerdem kapseln die drei Sprachen die clientseitigen Belange recht gut, sodass wir Web-App-Frontends schnell erstellen und ändern können, indem wir die lose Kopplung zwischen der Dokumentstruktur, dem Aussehen und dem Verhalten aller Elemente beibehalten. Sie können eines ganz einfach ändern, ohne die beiden anderen zu ändern.

Serverseitige Sprachen

Der Grund, warum Sie Unmengen von Optionen im serverseitigen Web haben, ist natürlich, dass Sie dies können. Es ist dein Server. Alles, was es tun muss, ist über http / ssl zu kommunizieren und der Rest liegt bei Ihnen. Übrigens ist JavaScript jetzt eine Option, aber das wirft eine interessante Frage auf. Sollten Sie eine Web-App dennoch so behandeln, als wären es zwei Apps auf beiden Seiten dieser HTTP-Wall. Ich bin der Meinung, durch Schmerz informiert zu sein, dass ja, ja, du solltest und ich liebe Node.js.

Erik Reppen
quelle
2

Kurz gesagt, bei großen Projekten arbeiten mehrere Entwicklerteams an dem Projekt, und diese Teams sind in der Regel auf verschiedene Anwendungsebenen spezialisiert.

Wenn Sie sich auf die Web-Benutzeroberfläche konzentrieren und Flexibilität bei der Auswahl der Implementierung haben, verwenden Sie mit größerer Wahrscheinlichkeit eine auf die Web-Benutzeroberfläche ausgerichtete Sprache wie JScript oder Flex anstelle von C #.

Wenn Sie sich am Ende des Transaktionsdatenspeichers der Anwendung befinden und gleichzeitig viele Aktionen ausführen, werden häufig spezielle Sprachen wie erlang verwendet. (Oder Produkte von Drittanbietern, die teilweise in diesen Sprachen implementiert sind)

Michael Shaw
quelle
2

Der Grund ist der Ausgleich von Geschäftsrisiken.

Angenommen, Sie sind ein riesiger Arbeitgeber in einer Stadt. Sie müssen viele Entwickler einstellen, um viele verschiedene Dienste zu erstellen. Nehmen wir an, Ihre anfängliche Einschätzung ist, dass Lanuage A Ihren Interessen am besten entspricht, und Sie möchten damit beginnen.

Wenn Sie sich für eine Technologie entscheiden, können Sie den Talentpool austrocknen. Sind Sie sicher, dass Sie einen anständigen Langauge-A-Typ einstellen möchten, wenn ein Stern der Sprache B gleich um die Ecke ist? Was ist, wenn die Frameworks von Langauge A morgen vom Hauptentwickler unterstützt werden? Was ist, wenn es morgen eine erstaunliche Sprache C gibt, sollten Sie sie ignorieren, weil Sie sich vor fünf Jahren der Sprache A verschrieben haben?

Idealerweise möchten Sie ein heterogenes System mit verschiedenen Sprachen, das den aktuellen Talentpool und Technologietrends widerspiegelt. Sie möchten, dass sich dieses Gleichgewicht langsam verschiebt, wenn sich der Talentpool und die Trends ändern, sodass zu jedem Zeitpunkt alle Ihre Systeme funktionsfähig sind und Sie die Mitarbeiter einstellen können, um sie zu warten.

... und so machen es Unternehmen.

MrFox
quelle
1

Es ist hilfreich, sich Front-End und Back-End als separate Anwendungen vorzustellen, die beide dieselbe Datenquelle verwenden.

Selbst für kleinere Websites können Sie sich das Front-End als Schnittstelle des Clients und das Back-End als CMS vorstellen. Hierbei kann es sich leicht um separate MVC-Anwendungen handeln. Für das Front-End müssen weiterhin Modelle und Controller ausgeführt werden. Schließlich ist der Controller der Einstiegspunkt für Ihre Site-Besucher und die Modelle werden die Art und Weise sein, wie Sie Daten aus Ihrer Datenbank an den Benutzer übertragen.

Ich mag es, Django / Python als CMS im Backend und Rails, CodeIgniter oder Spring MVC im Frontend zu verwenden. Oft gibt es keine Wahl; Der Kunde hat bereits eine Legacy-Site in einer bestimmten Sprache im Front-End eingerichtet und möchte lediglich eine CMS-Lösung. Die meisten Kunden würden nicht einmal wissen, dass das CMS eine andere Sprache oder ein anderes Framework ausführt, wenn ihnen dies nicht mitgeteilt würde.

Es geht wirklich darum, herauszufinden, was für die Site, die Sie erstellen möchten, am besten funktioniert. Das Frontend und das Backend müssen wirklich nur die Datenbank gemeinsam nutzen. Solange sie beide damit arbeiten können, können Sie die besten Optionen für die jeweilige Aufgabe auswählen.

Kenzo
quelle
0

Ein Beispiel für eine Back-End-Sprache ist PHP, eine Skriptsprache. Wenn eine PHP-Seite angefordert wird, liest der Server den PHP-Code und rendert das Markup. Das Ergebnis ist HTML, das an Sie gesendet wird. Sie, der Webseitenbetrachter, sehen niemals eine Zeile PHP-Code. Unter der Annahme, dass der Webserver-Administrator seine Arbeit korrekt ausgeführt hat, würde und könnte der Server Ihnen niemals den tatsächlichen PHP-Code anzeigen. Es wird analysiert, wenn die Seite bereitgestellt wird und das Ergebnis dieser Code-Übersetzung HTML ist.

yuvashree
quelle
Sie verwechseln die Kundenseite mit dem Frontend. In Unternehmensanwendungen ist das Backend der Ort, an dem die Daten gespeichert und Bestellungen verarbeitet werden, einschließlich der umfassenderen Geschäftslogik. Das Front-End ist das Material, das diese Back-End-Systeme aufruft, um die Website (mit welcher Technologie auch immer), eine Desktop-App oder eine mobile App zu steuern. Dies wird als Front-End-Codierung betrachtet. Als nächstes ist Client-Seite gegen Server-Seite, aber ich bin hier nicht mehr genügend Platz.
Rob van der Veer
Ich verstehe nicht, wie Ihre Antwort die Hauptfrage beantwortet, warum verschiedene Sprachen für Frontends und Backends verwendet werden.