Archived
2.2 KiB
2.2 KiB
Architektur
Die Anwendung trennt Hosts, UI, API, Verträge und Datenbankzugriff strikt.
Bsevita.Library.Maui -> Bsevita.Library.Ui -> Bsevita.Library.Models
Bsevita.Library.Web -> Bsevita.Library.Ui -> Bsevita.Library.Models
Bsevita.Library.Api -> Bsevita.Library.Models
Bsevita.Library.Api -> EF Core -> SQL Server LocalDB
Projekte
Bsevita.Library.Models: gemeinsame Request-/Response-Modelle, keine Datenbankabhängigkeit.Bsevita.Library.Ui: Razor Class Library mit Seiten, Layouts, Komponenten und API-Clients.Bsevita.Library.Web: Browser-Host für die UI; registriertHttpClientzur lokalen API.Bsevita.Library.Maui: nativer Host für dieselbe UI; löst die API-Adresse je Plattform auf.Bsevita.Library.Api: Controller, Services, EF Core und zentrale Fehlerbehandlung.Bsevita.Library.Api.Tests: API-Workflowtests mit Testdatenbank.
Datenfluss
- UI-Seiten rufen typed API-Clients aus
Bsevita.Library.Ui.Servicesauf. - API-Clients senden HTTP-Requests an
/api/...und lesen JSON oder ProblemDetails. - Controller delegieren an Services; Fachlogik liegt nicht im Controller.
- Services verwenden
LibraryDbContextund mappen Entities auf Models. - SQL Server speichert das Database-First-Schema aus
database/create_database.sql.
Datenbank
database/create_database.sql ist die Schema-Quelle. Der generierte EF-Code liegt unter src/Bsevita.Library.Api/Data/Generated und wird nicht für Fachlogik erweitert.
Wichtige Regeln liegen zusätzlich in der Datenbank:
UX_Students_CardNumber: eindeutige Ausweisnummern.UX_Books_BookNumber: eindeutige Buchnummern.UX_Loans_ActiveBook: höchstens eine aktive Ausleihe pro Buch.
Transaktionen und Fehler
Ausleihe, Rückgabe und Löschoperationen laufen in serialisierbaren Transaktionen, wenn eine relationale Datenbank verwendet wird. Vor dem Schreiben wird der aktuelle Zustand erneut geprüft.
Fachfehler werden zentral in application/problem+json übersetzt. Die UI zeigt diese Fehler über die gemeinsamen API-Clients an.
Grenzen
- Die UI referenziert weder
Bsevita.Library.ApinochLibraryDbContext. - API-Verträge sind nicht die EF-Entities.
- Löschen deaktiviert Schüler und Bücher, damit historische Ausleihen erhalten bleiben.