Dzhan Nezhdet

Design decisions

Table of contents

01: [Datenbank - SQLAlchemy Toolkit oder Plain SQL]

Meta

Status
Work in progress - Decided - Obsolete
Updated
31-07-2024

Problem statement

Die StudyBuddy-WebApp benötigt eine effiziente und zuverlässige Methode zur Speicherung und Verwaltung von Benutzerinformationen, Profilen, Nachrichten und Verbindungen zwischen Benutzern. Eine robuste Datenbanklösung ist erforderlich, um diese Daten sicher zu speichern, schnelle Abfragen zu ermöglichen und eine skalierbare Architektur zu bieten, die zukünftige Erweiterungen und zunehmende Benutzerzahlen unterstützt.

Decision

Nach sorgfältiger Überlegung haben wir uns entschieden, SQLAlchemy als ORM (Object-Relational Mapping)-Werkzeug zu verwenden, um die Datenbankoperationen effizient zu verwalten und die Entwicklung zu erleichtern.

Regarded options

SQLAlchemy

Vorteile:

  • Deklarative Syntax zur Definition von Datenbankmodellen.
  • Unterstützung für verschiedene Datenbanktypen (SQLite, PostgreSQL MySQL).
  • Einfache Integration mit Flask und Unterstützung für Datenbankmigrationen.

Nachteile:

  • Weniger performant für sehr große Datenmengen und komplexe Abfragen.

Plain SQL

Vorteile:

  • Volle Kontrolle über die SQL-Abfragen und Datenbankoperationen.
  • Direkte Nutzung von Datenbank-spezifischen Optimierungen und Funktionen.

Nachteile:

  • Erhöhter Entwicklungsaufwand und größere Fehleranfälligkeit.
  • Mangel an Abstraktion führt zu komplexerer Wartung und weniger Portabilität.

We regarded two alternative options:

  • Plain SQL3
  • SQLAlchemy
Criterion Plain SQL SQLAlchemy
Know-how ✔️ We know how to write SQL ❌ We must learn ORM concept & SQLAlchemy
Change DB schema ❌ SQL scattered across code ✔️ Good: classes, bad: need Alembic on top
Switch DB engine ❌ Different SQL dialect ✔️ Abstracts away DB engine

02: [Datenbankauswahl - SQLite, MySQL oder PostgreSQL]

Meta

Status
Work in progress - Decided - Obsolete
Updated
31-06-2024

Problem statement

Die StudyBuddy-WebApp benötigt eine Datenbanklösung, die leichtgewichtig, einfach zu verwalten und gut in die bestehende Infrastruktur integrierbar ist. Die Datenbank sollte für die aktuelle Größe und Nutzung der Anwendung ausreichend sein und gleichzeitig zukünftige Erweiterungen ermöglichen.

Decision

Nach sorgfältiger Überlegung haben wir uns entschieden, SQLite als Datenbank zu verwenden, um die Daten der StudyBuddy-WebApp zu speichern. Diese Entscheidung wurde getroffen, um eine einfache und effiziente Entwicklung und Verwaltung zu gewährleisten.

Regarded options

SQLite

Vorteile:

  • Leichtgewichtig und einfach zu verwenden.
  • Keine separate Serverinstallation erforderlich.
  • Gut geeignet für kleine bis mittelgroße Anwendungen.

Nachteile:

  • Weniger geeignet für sehr große Anwendungen mit hohem Datenaufkommen.
  • Eingeschränkte Unterstützung für parallele Schreibvorgänge.

MySQL

Vorteile:

  • Weit verbreitet und gut dokumentiert.
  • Leistungsstark und flexibel.

Nachteile:

  • Erfordert eine separate Serverinstallation und Verwaltung.
  • Komplexere Konfiguration und Administration im Vergleich zu SQLite.

PostgreSQL

Vorteile:

  • Leistungsstark und skalierbar.
  • Unterstützung für komplexe Abfragen und Datenbank-Transaktionen.

Nachteile:

  • Erfordert eine separate Serverinstallation und Verwaltung.
  • Höhere Komplexität und Verwaltungsaufwand im Vergleich zu SQLite.

03: [SocketIO]

Meta

Status
Work in progress - Decided - Obsolete
Updated
30-06-2024

Problem statement

Für die Echtzeit-Kommunikation zwischen Benutzern, insbesondere für die Chat-Funktion der StudyBuddy-WebApp, benötigen wir eine zuverlässige Lösung.

Decision

Wir haben uns entschieden, SocketIO für die Echtzeit-Kommunikation zu verwenden, um eine reibungslose und zuverlässige Chat-Funktion in unserer WebApp zu gewährleisten.

Regarded options

SocketIO

Vorteile:

  • Bidirektionale, ereignisbasierte Kommunikation.
  • Unterstützung für mehrere Transportschichten (WebSocket, Polling).
  • Nahtlose Integration mit Flask-SocketIO.

Nachteile:

  • Zusätzliche Komplexität bei der Verwaltung von Verbindungen und Echtzeitereignissen.

WebSockets

Vorteile:

  • Direkte, bidirektionale Kommunikation zwischen Client und Server.
  • Sehr performant und geeignet für Echtzeit-Anwendungen.
  • Weniger Overhead im Vergleich zu SocketIO.

Nachteile:

  • Keine Unterstützung für ältere Browser, die WebSockets nicht unterstützen.
  • Erfordert mehr manuelle Arbeit für Fallback-Mechanismen und Verbindungshandling.
  • Weniger benutzerfreundlich in Bezug auf Bibliotheken und Integrationen im Vergleich zu SocketIO.

04: [Flask-WTF]

Meta

Status
Work in progress - Decided - Obsolete
Updated
28-06-2024

Problem statement

Benötigung einer effizienten Lösung zur Erstellung und Validierung von Formularen, um Benutzereingaben sicher und benutzerfreundlich zu verarbeiten.

Decision

Wir haben uns für Flask-WTF entschieden, um sichere und benutzerfreundliche Formulare in unserer WebApp zu erstellen und zu validieren.

Regarded options

Flask-wtf

Vorteile:

  • Einfache Erstellung und Validierung von Formularen.
  • Integration mit Flask und Unterstützung für CSRF-Schutz.
  • Nutzt die mächtige WTForms-Bibliothek.

Nachteile:

  • Kann für sehr komplexe Formulare und Validierungsregeln umständlich werden.

WTForms

Vorteile:

  • Leistungsstarke Bibliothek zur Erstellung und Validierung von Formularen.
  • Flexibel und gut dokumentiert.
  • Kann unabhängig von Flask verwendet werden, was mehr Flexibilität bietet.

Nachteile:

  • Erfordert zusätzliche Arbeit für die Integration mit Flask.
  • Kein eingebauter CSRF-Schutz, erfordert zusätzliche Sicherheitsmaßnahmen.

Django Forms

Vorteile:

  • Integrierte Formular- und Validierungslösung im Django-Framework.
  • Automatische Erstellung von Formularen basierend auf Datenbankmodellen.
  • Umfangreiche Funktionen und Sicherheitsmaßnahmen, einschließlich CSRF-Schutz.

Nachteile:

  • Nur für Django geeignet, nicht für Flask.
  • Höhere Komplexität und Lernkurve im Vergleich zu Flask-WTF.

05: [Flask-Email]

Meta

Status
Work in progress - Decided - Obsolete
Updated
10-07-2024

Problem statement

Die StudyBuddy-WebApp benötigt eine zuverlässige und effiziente Methode zum Versenden von E-Mails, um Benutzer über wichtige Ereignisse wie Registrierungsbestätigungen, Passwort-Reset-Anfragen und Benachrichtigungen zu informieren. Die Lösung sollte sich nahtlos in Flask integrieren lassen und einfach zu implementieren und zu verwalten sein.

Decision

Wir haben uns entschieden, Flask-Mail zu verwenden, um E-Mails in unserer StudyBuddy-WebApp zu versenden. Diese Entscheidung wurde getroffen, um eine einfache und effektive Methode zur E-Mail-Verwaltung zu gewährleisten.

Regarded options

Flask-Mail

Vorteile:

  • Nahtlose Integration mit Flask.
  • Einfache Konfiguration und Nutzung.
  • Unterstützt verschiedene E-Mail-Server und Protokolle (SMTP, SSL/TLS).
  • Gute Dokumentation und Community-Unterstützung.
  • Ermöglicht das Versenden von Text- und HTML-E-Mails sowie das Anhängen von Dateien.

Nachteile:

  • Begrenzte erweiterte Funktionen im Vergleich zu spezialisierten E-Mail-Diensten.
  • Erfordert die Konfiguration und Verwaltung eines eigenen E-Mail-Servers oder eines externen SMTP-Dienstes.

SendGrid

Vorteile:

  • Leistungsstarker externer E-Mail-Dienst mit vielen erweiterten Funktionen (z.B. Zustellbarkeitsanalyse, API für Massen-E-Mails).
  • Kein eigener E-Mail-Server erforderlich, einfachere Verwaltung.
  • Gute Skalierbarkeit und Zuverlässigkeit.

Nachteile:

  • Zusätzliche Kosten für die Nutzung des Dienstes.
  • Abhängigkeit von einem externen Dienstleister.
  • Komplexere API-Integration im Vergleich zu Flask-Mail.