Struktur - green-ecolution/backend GitHub Wiki

Die Struktur des Backend-Systems unseres Projekts basiert auf der Philosophie der Clean Architecture. Diese Architektur zielt darauf ab, die Software in unabhängige Schichten aufzuteilen, wobei jede Schicht eine klar definierte Aufgabe hat und von den anderen isoliert ist. Dies begünstigt eine hohe Wartbarkeit, Testbarkeit und eine einfache Erweiterbarkeit des Codes. Hier eine detailliertere Erläuterung der einzelnen Schichten und ihrer Funktionen

TL;DR

Das Backend-System unseres Projekts verwendet Clean Architecture, um Software in unabhängige Schichten aufzuteilen für verbesserte Wartbarkeit, Testbarkeit, und Erweiterbarkeit. Die Schichten:

  • Server Layer: Agiert als Kommunikationsebene mit externen Protokollen (z.B. HTTP, MQTT), trennt strikt Server für unabhängiges Arbeiten.
  • Service Layer: Das Herzstück der Anwendung, implementiert die Geschäftslogik unabhängig von Datenpersistenz oder Kommunikationsdetails.
  • Storage Layer: Verantwortlich für den Zugriff auf Datenquellen und Datenpersistenz, verbirgt Details der Datenspeicherung hinter einer abstrakten Schnittstelle.

image

Transport Layer

Der Transport Layer agiert als Kommunikationsebene zwischen der Anwendung und der Außenwelt. Er ist zuständig für das Handling sämtlicher externer Kommunikationsprotokolle, wie zum Beispiel HTTP für Webanfragen oder MQTT für Messaging-Funktionalitäten. Die strikte Trennung der Server (z.B. http und mqtt) gewährleistet, dass diese unabhängig voneinander arbeiten und keine direkten Abhängigkeiten untereinander haben. Somit ist sichergestellt, dass Änderungen oder Erweiterungen in einem Bereich keine unbeabsichtigten Effekte in anderen Bereichen nach sich ziehen.

Entitäten

Jede Entität in diesem Layer ist spezifisch für die Kommunikation zugeschnitten und trägt den Suffix ...Response, was ihre Rolle im Datenaustausch deutlich macht.

Service Layer

Der Service Layer ist das Herzstück der Anwendung, in dem die gesamte Geschäftslogik (Domain Logic) implementiert wird. Diese Schicht verarbeitet Daten, führt Berechnungen durch und trifft Entscheidungen basierend auf den Regeln und Anforderungen des Projekts. Sie operiert unabhängig von den Details der Datenpersistenz oder den Kommunikationsmechanismen und fokussiert sich ausschließlich auf die Umsetzung der Geschäftslogik.

Entitäten

Dieser Layer verwendet die Entitäten der Domain, wobei diese von den technischen Details der Datenhaltung oder der Datenübertragung abstrahiert sind.

Storage Layer

Der Storage Layer ist für den Zugriff auf Datenquellen und die Persistenz der Daten verantwortlich. Je nach Anforderung kann diese Schicht die Kommunikation mit Datenbanken, Dateisystemen oder anderen Formen der Datenspeicherung übernehmen. Der Zweck ist es, eine abstrakte Schnittstelle für den Zugriff auf die Daten zu bieten, welche von den oberen Schichten genutzt wird, und somit die Details der Datenpersistierung zu verbergen.

  • Datenbank => Postgres
  • Speicher => S3
  • Routing => (ORS, Valhalla) Vroom als Optimierung

Entitäten

Die Entitäten in dieser Schicht werden von sqlc definiert.

Weiteres