Die Wahl eines Technologie-Stacks, der den Anforderungen Ihrer Anwendung entspricht, ist entscheidend. Obwohl Sie so gut wie jede Programmiersprache für die Erstellung einer Backend-Anwendung verwenden können, erleichtern einige den Einstieg, andere die spätere Wartung der Anwendung. Für welchen Stack haben wir uns also entschieden?
Backend
Die Erstellung eines robusten, schnellen und sicheren Backends ist einer der wichtigsten Teile bei der Erstellung von Webanwendungen. Die meisten (wenn nicht alle) Logiken und Berechnungen werden auf der Serverseite durchgeführt.
Scala
Bei GoodSoft verwenden wir die Sprache Scala für fast alle unsere Backends. Die wichtigsten Funktionen für unseren Anwendungsfall sind:
- Statische Typisierung
- OOP- und FP-Stile
- Riesige Menge an Bibliotheken
- Großartige Gemeinschaft und Dokumentation
Die erste spart uns eine Menge Zeit, da die meisten Fehler während der Kompilierung abgefangen werden können. Wir müssen nicht raten, welcher Typ zurückgegeben wird, oder explizit prüfen, ob eine Variable so ist, wie sie sein sollte.
Die Kombination von objektorientierter Programmierung und funktionalen Programmierstilen ermöglicht es uns, unsere Systeme mit Objekten zu modellieren und Berechnungen mit funktionalen Paradigmen durchzuführen. Das zweite macht es viel einfacher, Methoden zu debuggen, da das Ergebnis nur von den übergebenen Argumenten und nicht von irgendwelchen versteckten Zuständen abhängen sollte.
Scala hat nicht nur seine eigenen Bibliotheken, sondern kann, da es auf der JVM läuft und zu Bytecode kompiliert, alle Java-Bibliotheken nutzen. Dies bietet uns bei der Suche nach Lösungen eine große Anzahl von Möglichkeiten.
PlayFramework
Da wir Backend-Serveranwendungen erstellen, benötigen wir eine Art Web-Framework. PlayFramework ist ein Scala-basiertes Framework, das alle notwendigen Werkzeuge für die Erstellung von Webanwendungen bietet. Es ist ein Open-Source-Projekt, das von Lightbend und seiner Community entwickelt wurde. Seine Hauptmerkmale sind die Benutzerfreundlichkeit – es verwendet Konventionen anstelle von Konfigurationen, ermöglicht ein schnelles Nachladen von Code während der Entwicklung und ist vollständig zustandslos. Der letzte Teil ist wichtig. Er hilft bei der Erstellung leicht skalierbarer Anwendungen. Eine weitere wichtige Funktion ist die Unterstützung für asynchrone E/A-Operationen. Damit können wir lange Anfragen verarbeiten und bedienen, ohne HTTP-Threads zu blockieren.
Data access and database
Die Datenbank unserer Wahl ist PostgreSQL. Wir verwenden sie wegen ihrer schnellen Lese- und Schreibgeschwindigkeiten und ihrer hervorragenden Handhabung komplizierter SQL-Abfragen.
Um den Datenbankzugriff in unseren Serveranwendungen zu vereinfachen, verwenden wir Quill. Das ist eine Bibliothek, mit der wir Scala-Code für den Datenzugriff schreiben können. Ein weiterer wichtiger Aspekt der Verwendung von Quill ist die Möglichkeit, Datenbanken vollständig zu wechseln. In Zukunft könnten wir Daten auf andere Engines migrieren und Quill sollte alles für uns erledigen.
Frontend
Für die meisten unserer Projekte erstellen wir keine separate Frontend-Anwendung mit JavaScript-Framework. Wir verwenden meist Play Templates mit einer Kombination aus Bootstrap für das Styling und reinem JS oder JQuery für zusätzliche clientseitige Operationen.
Deployment
Jede Anwendung, die wir erstellen, ist anders. Einige müssen große Mengen an Dateien speichern, andere müssen auf einem kleinen Server im Büro des Kunden laufen. Aus diesem Grund stellen wir sie in vielen verschiedenen Umgebungen wie AWS oder VPS bereit.