This repository has been archived on 2026-07-22. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2026-06-24 08:33:23 +02:00

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; registriert HttpClient zur 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

  1. UI-Seiten rufen typed API-Clients aus Bsevita.Library.Ui.Services auf.
  2. API-Clients senden HTTP-Requests an /api/... und lesen JSON oder ProblemDetails.
  3. Controller delegieren an Services; Fachlogik liegt nicht im Controller.
  4. Services verwenden LibraryDbContext und mappen Entities auf Models.
  5. 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.Api noch LibraryDbContext.
  • API-Verträge sind nicht die EF-Entities.
  • Löschen deaktiviert Schüler und Bücher, damit historische Ausleihen erhalten bleiben.