(vision) SCS/DDD
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
@startuml
|
||||
title "Detailliertes Datenmodell: Nennungs_Context"
|
||||
|
||||
!theme vibrant
|
||||
|
||||
' Externe Referenzen werden der Übersichtlichkeit halber als vereinfachte Entitäten dargestellt.
|
||||
package "Externe Referenzen (Andere Kontexte)" {
|
||||
class Veranstaltungs_Context_API
|
||||
class Personen_Context_API
|
||||
class Lizenzen_Context_API
|
||||
}
|
||||
|
||||
package "Nennungsabwicklung" as NennungsContext {
|
||||
|
||||
' #################### Aggregate Root: Nennung ####################
|
||||
class Nennung <<(A,blue) Aggregate Root>> {
|
||||
+ nennungId : UUID <<PK>>
|
||||
--
|
||||
' -- Snapshots von Daten aus anderen Kontexten --
|
||||
' Daten zur Prüfung/Abteilung zum Zeitpunkt der Nennung
|
||||
+ pruefung : PruefungsReferenzVO
|
||||
' Daten zum Reiter zum Zeitpunkt der Nennung
|
||||
+ reiter : ReiterReferenzVO
|
||||
' Daten zum Pferd zum Zeitpunkt der Nennung
|
||||
+ pferd : PferdeReferenzVO
|
||||
' Optionaler Ersatzreiter gem. KKARTEI-Satz
|
||||
+ ersatzreiter : ReiterReferenzVO
|
||||
--
|
||||
' -- Nennungsspezifische Attribute --
|
||||
+ nennungsZeitpunkt : timestamp
|
||||
+ status : NennungsStatusVO
|
||||
' Kopfnummer gem. KKARTEI-Satz
|
||||
+ zugewieseneKopfnummer : VARCHAR(4)
|
||||
' Nenn- und Startgeld
|
||||
+ nenngebuehr : GeldbetragVO
|
||||
' Zahlungsstatus der Nenngebühr
|
||||
+ bezahlStatus : BezahlStatusVO
|
||||
' Betrag, der lt. Nennliste eingezahlt wurde
|
||||
' KKARTEI, Stelle 161-165
|
||||
+ bezahltBetragKontrolle : GeldbetragVO
|
||||
' Betrag, der mit dem Veranstalter verrechnet wird
|
||||
' KKARTEI, Stelle 118-122
|
||||
+ accontoBetrag : GeldbetragVO
|
||||
' Box bestellt? Gem. KKARTEI-Satz
|
||||
+ istStallReserviert : boolean
|
||||
' Grund, falls die Nennung abgelehnt wurde
|
||||
+ ablehnungsGrund : string
|
||||
}
|
||||
|
||||
' #################### Value Objects (VOs) für Snapshots und Beschreibungen ####################
|
||||
' Snapshot der wichtigsten Prüfungsdaten aus dem Veranstaltungs_Context.
|
||||
class PruefungsReferenzVO <<VO>> {
|
||||
' Referenz zur originalen Abteilung
|
||||
+ pruefungAbteilungDbId : UUID
|
||||
' Relevante Daten zum Zeitpunkt der Nennung
|
||||
+ turnierName : string
|
||||
+ bewerbBezeichnung : string
|
||||
+ abteilungBezeichnung : string
|
||||
' Anforderungsprofil, das zum Zeitpunkt der Nennung galt
|
||||
+ anforderungsProfil : AnforderungsProfilVO
|
||||
}
|
||||
|
||||
' Snapshot der wichtigsten Reiterdaten aus dem Personen_Context.
|
||||
class ReiterReferenzVO <<VO>> {
|
||||
' Referenz zur originalen Person
|
||||
+ oepsSatzNrPerson : VARCHAR(6)
|
||||
' Relevante Daten zum Zeitpunkt der Nennung
|
||||
+ name : string
|
||||
+ vereinsName : string
|
||||
' Snapshot der Lizenzen zur Validierung
|
||||
+ lizenzSnapshot : List<string>
|
||||
}
|
||||
|
||||
' Snapshot der wichtigsten Pferdedaten aus dem Personen_Context.
|
||||
class PferdeReferenzVO <<VO>> {
|
||||
' Referenz zum originalen Pferd
|
||||
+ oepsSatzNrPferd : VARCHAR(10)
|
||||
' Relevante Daten zum Zeitpunkt der Nennung
|
||||
+ name : string
|
||||
}
|
||||
|
||||
' Kapselt die Anforderungen, die zum Zeitpunkt der Nennung gültig waren.
|
||||
class AnforderungsProfilVO <<VO>> {
|
||||
+ erlaubteAltersklassen : List<string>
|
||||
+ erforderlicheLizenzen : List<string>
|
||||
}
|
||||
|
||||
class GeldbetragVO <<VO>> {
|
||||
+ wert : decimal
|
||||
+ waehrung : string
|
||||
}
|
||||
|
||||
' Enum für den Lebenszyklus einer Nennung.
|
||||
enum NennungsStatusVO {
|
||||
EINGEGANGEN
|
||||
IN_PRUEFUNG
|
||||
STARTBERECHTIGT_BESTAETIGT
|
||||
ABGELEHNT
|
||||
ZURUECKGEZOGEN
|
||||
}
|
||||
|
||||
' Enum für den Zahlungsstatus.
|
||||
enum BezahlStatusVO {
|
||||
OFFEN
|
||||
BEZAHLT
|
||||
}
|
||||
|
||||
|
||||
' #################### Beziehungen ####################
|
||||
' Die Nennung ist das einzige Aggregat und enthält ihre beschreibenden VOs (Komposition).
|
||||
Nennung "1" o-- "1" PruefungsReferenzVO
|
||||
Nennung "1" o-- "1" ReiterReferenzVO
|
||||
Nennung "1" o-- "1" PferdeReferenzVO
|
||||
Nennung "1" o-- "0..1" ReiterReferenzVO : "Ersatzreiter"
|
||||
Nennung "1" o-- "1" GeldbetragVO : "Nenngebühr"
|
||||
Nennung "1" -- "1" NennungsStatusVO
|
||||
Nennung "1" -- "1" BezahlStatusVO
|
||||
}
|
||||
|
||||
' Beziehungen zu externen Kontexten (dargestellt als API-Aufrufe)
|
||||
Nennung ..> Veranstaltungs_Context_API : "holt Prüfungsdetails"
|
||||
Nennung ..> Personen_Context_API : "holt Reiter-/Pferdedetails"
|
||||
Nennung ..> Lizenzen_Context_API : "prüft Startberechtigung"
|
||||
|
||||
note right of Nennung
|
||||
**Aggregate Root: Nennung**
|
||||
* **Verantwortung:** Eine Nennung ist eine unteilbare, transaktionale Einheit. Sie repräsentiert den "Vertrag" zwischen Reiter und Veranstalter für die Teilnahme an einer Prüfung.
|
||||
* **Datenherkunft:** Viele Attribute sind direkt auf den `KKARTEI`-Satz im OEPS Pflichtenheft zurückzuführen, z.B. `ERSATZREITER` , `ACCONTO` , `STALL` und `BEZAHLT`.
|
||||
* **Validierungslogik:** Bei der Erstellung oder Prüfung einer Nennung ruft das Aggregat andere Kontexte auf, um die aktuellen Daten zu verifizieren (z.B. "Ist die Lizenz des Reiters noch gültig?"). Die Entscheidung ("Akzeptiert" / "Abgelehnt") wird aber hier im `Nennungs_Context` getroffen und gespeichert.
|
||||
end note
|
||||
|
||||
@enduml
|
||||
Reference in New Issue
Block a user