Webdev-Haskell/writeup.md

66 lines
2.1 KiB
Markdown
Raw Normal View History

2022-09-07 06:24:54 +00:00
#Modernes Web-Development in Haskell am Beispiel des Projektes `mateamt`
##Webentwicklung
* Typischerweise unterteilt in Frontend und Backend
* Typische Sprachen Backend:
* PHP
* Java
* Ruby
* Python
* Frontendentwicklung geschieht in:
* HTML
* CSS
* JavaScript
* Häufige Bibliotheken im Frontend:
* React
* Bootstrap
* jQuery
##Haskell
* Rein funktionale Programmiersprache
* Nicht-strikt evaluiert
* Stark statisch typisiert
* Volle Typinferenz
* Typische Einsatzgebiete:
* Big Data
* Banken- und Finanzsektor
* Wissenschaft (Simulationen, Hochparallele Berechnungen)
* Theoretisch: Überall, da Turing-Vollständig
###Hauptunterschiede zur imperativen Programmierung
* Vermeidung bzw. klare Trennung von Seiteneffekten (Disk IO, DB, Netzwerk, etc.)
* Unveränderliche Variablen
* Keine Schleifen
* Kein State
##Vorteile von Haskell in der Webentwicklung
* Serialisierung und Deserialisierung von Daten meist unkompliziert, da stark typisiert
* Datenverarbeitung kann einfach auf Korrektheit geprüft werden
* Webanwendungen sind i.d.R. stateless, Haskell auch
* Haskell kann sehr gut mit konkurrenten Berechnungen umgehen, welche bei Webanwendungen häufig
auftreten
##Konventionen beim `mateamt` und Unterschiede vom `yammat`
* Programmiert ist es (wieder) in Haskell
* Grundsätzlich ist das `mateamt` 'nur' ein Backend
* Microservice-Architektur (Im Gegensatz zum monolithischen `yammat`) ermöglicht klarere Trennung
zwischen Daten- und Kundenseite (Separation of Concerns)
* Es wird ein modifiziertes MVC-Architekturmodell verwendet:
* 'View' ist ausgelassen, da keine Anzeige erfolgt
* Vorteil ist auch hier eine Domänentrennung zwischen Datenbank und Controller.
* Kommunikation mit Frontend(s) läuft über eine definierte JSON-REST-API
##Das Frontend des `mateamt`es
* Zukünftige Benutzer das `mateamt`es sind ausdrücklich eingeladen eigene Clients/Frontends für die
API des `mateamt`es in einer Sprache ihrer Wahl zu implementieren.
* Zur Unterstützung der Entwicklung eigener Clients/Frontends werden angeboten:
* OpenAPI 3.0 beschreibung der API
* Swagger UI
* Ein Referenzclient (der `matebeamte`) ist bereits in Arbeit