Wir müssen entscheiden, welche Programmiersprachen wir für unser Projekt verwenden.
Wir benötigen eine Sprache für unser **webbasiertes Frontend** und eine für unser **REST-API-Backend**.
We need to decide wich programming languages we use for our project. We need a language for our web-based frontend and a language for our REST-API backend.
### Entscheidung
### Decision
Wir wählen **Java** für das Backend.
We are choosing Java for the backend.
We are choosing JavaScript / Typescript for the frontend.
Wir wählen **JavaScript / TypeScript** für das Frontend.
### Status
### Status
Decided. Alternatives
Entschieden. Alternativen können in der Zukunft erneut evaluiert werden.
## Details
## Details
### Annahmen
### Assumptions
Die Frontend-Anwendungen sind typische Webapplikationen mit:
The front-end applications are typical:
* Typical users and interactions
* Typical browsers and systems
* Typical developments and deployments
The front-end requirements are the following:
* We want to ensure fast development and an easy learning process for new developers.
* We value provability, such as type safety.
* We do not need legacy compatibility.
The back-end requirements are the following:
* Typical standarts for quality, reliability and security.
* Fast and easy development process, easy learning process for new developers.
### Constraints
There are no technical constraints for the languages.
### Positions
We considered these langauges:
* C#
* Java
* JavaScript
* TypeScript
* Typischen Benutzerinteraktionen
* Typischen Browsern und Betriebssystemen
* Typischen Entwicklungs- und Deployment-Prozessen
### Argument
Die Anforderungen an das Frontend sind:
Summary per language:
* Schnelle Entwicklung und eine einfache Einarbeitung neuer Entwickler.
* Gute Typensicherheit und Nachweisbarkeit im Code.
* Keine Abhängigkeit von veralteten Technologien.
* C#: Rejected, because of to many not experienced devs in the team. Also a small community and too few existing projects and learning materials on the front-end side.
Die Anforderungen an das Backend sind:
* Java: All devs in team know it. Spring framework is widely used and industry standart. Lots of learning material
* Übliche Standards für **Qualität, Zuverlässigkeit und Sicherheit**.
* Schnelle und einfache Entwicklung, sowie eine einfache Einarbeitung neuer Entwickler.
* JavaScript: Rejected, because of missing typesafety and too complicated eco system in server environments. Partly rejected for frontend since TypeScript has typesafety and is completely compatible to JS.
### Einschränkungen
* TypeScript: Wide range of frontend frameworks. Direct compatibility to JS. Industry standart for modern web applications.
Es gibt keine technischen Einschränkungen für die Wahl der Programmiersprachen.
### Implications
### Positionen
Front-end developers will need to learn TypeScript. This is likely an easy learning curve if the developer's primary experience is using JavaScript.
Wir haben folgende Sprachen in Betracht gezogen:
Back-end developers will need to learn Java and the spring web framework. Since all dev already know Java the learning can concentrate on the spring framework
***C#**
***Java**
***JavaScript**
***TypeScript**
TypeScript and Java are widely used in current projects. So there should be a lot of learning material and existing projects or packages.
### Argumentation
IDE support for these languages is very good since JetBrains sells IntelliJ for Java development and WebStorm for TypeScript development.
Bewertung der einzelnen Sprachen:
***C#**: Abgelehnt, da zu wenige Entwickler im Team Erfahrung damit haben. Außerdem hat C# eine vergleichsweise kleine Community und wenige bestehende Projekte bzw. Lernmaterialien für das Frontend.
## Related
***Java**: Alle Entwickler im Team beherrschen Java. Das Spring-Framework ist weit verbreitet und gilt als **Industriestandard**. Zudem gibt es eine große Menge an Lernmaterial.
***JavaScript**: Abgelehnt für das Backend aufgrund fehlender Typensicherheit und eines zu komplexen Ökosystems in Server-Umgebungen. Teilweise für das Frontend abgelehnt, da TypeScript die gleichen Möglichkeiten bietet, aber mit Typensicherheit.
### Related decisions
***TypeScript**: Große Auswahl an modernen **Frontend-Frameworks**. Volle Kompatibilität mit JavaScript. **Industriestandard** für moderne Webanwendungen.
We will aim toward ecosystem choices that align with these langauges.
### Implikationen
We need to choose a frontend framework. It will likely be a TypeScript based framework.
-**Frontend-Entwickler müssen TypeScript lernen**. Da es eine Erweiterung von JavaScript ist, sollte die Lernkurve gering sein, besonders für Entwickler mit JavaScript-Erfahrung.
-**Backend-Entwickler müssen Java und das Spring-Framework lernen**. Da alle Entwickler bereits Java beherrschen, liegt der Fokus auf der Einarbeitung in das Spring-Framework.
-**TypeScript und Java sind weit verbreitet**, sodass viele Lernmaterialien und bestehende Projekte oder Pakete verfügbar sind.
-**IDE-Support ist sehr gut**, da **JetBrains IntelliJ** für Java-Entwicklung und **WebStorm** für TypeScript-Entwicklung anbietet.
## Verwandtes
### Related requirements
### Verwandte Entscheidungen
Our entire toolchain must support these languages.
Wir werden das **Ökosystem** an unseren gewählten Sprachen ausrichten.
Wir müssen ein **Frontend-Framework** auswählen, das voraussichtlich auf **TypeScript** basieren wird.
### Related artifacts
### Verwandte Anforderungen
We expect we may export some secrets to environment variables.
Unsere gesamte **Toolchain** muss diese Programmiersprachen unterstützen.
### Verwandte Artefakte
### Related principles
Wir erwarten, dass wir einige **geheime Umgebungsvariablen** exportieren müssen.
We aim for stable and easily mantainable code. Speed might be neglected, if it requires to build unsafe code.
### Verwandte Prinzipien
Wir streben **stabilen und leicht wartbaren Code** an. Geschwindigkeit könnte dabei **hintenangestellt** werden, wenn sie unsicheren Code erfordert.