Zum Hauptinhalt springen

5.2. Level 2

Frontend

Als Frontend wird eine Angular Webanwendung eingesetzt.

Die Anwendung ist ähnlich der Backend Services in unterschiedliche Module geschnitten. Dabei werden selbstständig Abschnitte zusätzlich als eigene Module abgetrennt. Die Module verwenden dabei nicht nicht die API ihres jeweilig zugehörigen Backend Services sondern kombinieren diese benutzerfreundlich.

Um Mehrfachimplementierung zu vermeiden gibt es zusätzliche Shared Modules um wiederverwendbare Komponenten explizit zu definieren.

Im Rahmen der Einführung von sog. Standalone-Components ab Angular 14 wird diese Sortierung in Module weiter aufgebrochen um Componenten mehrfach zu verwenden und damit Darstellungen von zB Spenden an vielen Stellen (Spenden pro Verband, Spenden pro Person, Spenden pro Zeitperiode, Spenden pro Zuwendungsbestätigung, ...) einheitlich zu gestalten.

Backend

Das Backend besteht aus 6 Deploy-Einheiten, die intern hinsichtlich nach ihrer Fachlichkeit gruppierte Funktionen enthalten. Strukturell sind alle Java / Spring Services in Controller, Service und Repository geteilt.

Die Controller stellen die Endpoints bereit. Hier werden die Models definiert, die in Form von JSON-Objekten als Body der REST Requests und Responses verwendet werden. Die veröffentlichten Endpoints werden durch eine Security-Annotation geschützt, wodurch eine Vorab-Prüfung durchgeführt wird, noch bevor die eigentlichen Methoden aufgerufen werden.

Ein Controller leitet die Anfragen an einen oder mehrere Services weiter. Diese implementieren die Business Logic, prüfen detaillierte Zugriffsrechte und sind über die jeweilig angebotenen APIs mit anderen internen sowie externen Services in Verbindung. Services einer Deploy Einheit können miteinander kommunizieren ohne die extern erreichbare API zu verwenden.

Repositories bilden die Anfragen an die Datenbank ab und übersetzt die gelieferten Daten in die Objekt Strukturen der Entities. Sie werden von den jeweilig zuständigen Services verwendet. Dabei greift je nur ein Service schreibend auf die Repositories zu um Validierungen zentral abbilden zu können.

Datenerhaltung

Die hauptsächliche Datenhaltung finde in mehreren MySQL Datenbanken statt. Dabei hat jeder Backend Service eine eigene Datenbank und verwendet einen Zugang, der Zugriff nur auf seine entsprechende Datenbank ermöglicht. Das Schema wird dabei vorgegeben und kann nicht durch die Services verändert werden.

Um Dateien nicht als BLOBs in der Datenbank speichern zu müssen, gibt es zusätzlich ein File System. Hier haben die Services jeweils Zugriff auf einen Ordner, in dem insb. PDF-Dokumente abgelegt werden. Diese sind in fachlich gruppierten Unterordner gespeichert und werden durch zusätzliche Informationen (Zuordnung zu einem Kontext, Dateiname, Dateiformat, Zugriffssteuerung, etc.) aus einem zugehörigen Datenbankeintrag ergänzt.