meldestelle/docs/bounded-contexts-design.md
2025-07-17 15:17:31 +02:00

4.3 KiB

Bounded Contexts Design für Self-Contained Systems

Übersicht

Das Meldestelle-System wird in 7 Bounded Contexts unterteilt, um eine Self-Contained Systems (SCS) Architektur zu implementieren.

Bounded Contexts

1. Member Management Context (member-management)

Verantwortlichkeiten:

  • Personenverwaltung (Reiter, Funktionäre, Kontaktpersonen)
  • Vereinsverwaltung (Reitvereine, Verbände)
  • Mitgliedschaftsbeziehungen

Kern-Entitäten:

  • DomPerson
  • DomVerein

APIs:

  • /api/members/persons
  • /api/members/clubs
  • /api/members/memberships

Abhängigkeiten:

  • Master Data Context (für Länder/Bundesländer)
  • Data Integration Context (für ZNS Import)

2. Horse Registry Context (horse-registry)

Verantwortlichkeiten:

  • Pferderegistrierung und -verwaltung
  • Besitzverhältnisse
  • Abstammungsinformationen

Kern-Entitäten:

  • DomPferd

APIs:

  • /api/horses
  • /api/horses/ownership
  • /api/horses/pedigree

Abhängigkeiten:

  • Member Management Context (für Besitzer/Verantwortliche)
  • Data Integration Context (für ZNS Import)

3. License & Qualification Context (license-management)

Verantwortlichkeiten:

  • Lizenzverwaltung
  • Qualifikationstracking
  • Gültigkeitsüberwachung

Kern-Entitäten:

  • DomLizenz
  • DomQualifikation
  • LizenzTypGlobal
  • QualifikationsTyp

APIs:

  • /api/licenses
  • /api/qualifications
  • /api/licenses/validity

Abhängigkeiten:

  • Member Management Context (für Lizenzinhaber)
  • Master Data Context (für Lizenztypen)

4. Event Management Context (event-management)

Verantwortlichkeiten:

  • Turnier- und Veranstaltungsorganisation
  • Terminplanung
  • Veranstaltungsrahmen

Kern-Entitäten:

  • Turnier
  • Veranstaltung
  • VeranstaltungsRahmen
  • Pruefung_Abteilung

APIs:

  • /api/events
  • /api/tournaments
  • /api/events/schedule

Abhängigkeiten:

  • Member Management Context (für Funktionäre)
  • Master Data Context (für Plätze)
  • Competition Management Context (für Bewerbe)

5. Master Data Context (master-data)

Verantwortlichkeiten:

  • Referenzdatenverwaltung
  • Geografische Daten
  • Altersklassendefinitionen

Kern-Entitäten:

  • BundeslandDefinition
  • LandDefinition
  • AltersklasseDefinition
  • Sportfachliche_Stammdaten
  • Platz

APIs:

  • /api/masterdata/countries
  • /api/masterdata/states
  • /api/masterdata/age-classes
  • /api/masterdata/venues

Abhängigkeiten:

  • Keine (Basis-Context)

6. Data Integration Context (data-integration)

Verantwortlichkeiten:

  • OEPS ZNS Datenimport
  • Datentransformation
  • Staging-Management

Kern-Entitäten:

  • Person_ZNS_Staging
  • Pferd_ZNS_Staging
  • Verein_ZNS_Staging

APIs:

  • /api/integration/import
  • /api/integration/staging
  • /api/integration/validation

Abhängigkeiten:

  • Alle anderen Contexts (für Datenverteilung)

7. Competition Management Context (competition-management)

Verantwortlichkeiten:

  • Bewerbssetup
  • Disziplin-spezifische Regeln
  • Wertungssystem

Kern-Entitäten:

  • Bewerb
  • Abteilung
  • Pruefungsaufgabe
  • DressurPruefungSpezifika
  • SpringPruefungSpezifika
  • Meisterschaft_Cup_Serie

APIs:

  • /api/competitions
  • /api/competitions/disciplines
  • /api/competitions/scoring

Abhängigkeiten:

  • Event Management Context (für Turniere)
  • Member Management Context (für Teilnehmer)
  • Horse Registry Context (für Pferde)

Inter-Context Communication

Synchrone Kommunikation

  • REST APIs zwischen Contexts
  • Shared DTOs für Datenaustausch

Asynchrone Kommunikation

  • Event-basierte Kommunikation für lose Kopplung
  • Domain Events für wichtige Geschäftsereignisse

Shared Kernel

  • Gemeinsame Enums und Basis-DTOs
  • Serializer und Validatoren
  • Utility-Klassen

Deployment-Strategie

Jeder Bounded Context wird als separates Modul implementiert:

  • Eigene Gradle-Module
  • Separate Datenbank-Schemas (optional)
  • Unabhängige Deployment-Einheiten
  • Eigene API-Endpunkte

Vorteile der SCS-Architektur

  1. Autonomie: Jeder Context kann unabhängig entwickelt und deployed werden
  2. Skalierbarkeit: Contexts können individuell skaliert werden
  3. Technologie-Diversität: Verschiedene Technologien pro Context möglich
  4. Team-Autonomie: Teams können unabhängig an verschiedenen Contexts arbeiten
  5. Fehler-Isolation: Probleme in einem Context beeinträchtigen andere nicht