docs: add C4 model for renamed and extended domain components

- Introduced `Kernentitaeten_Umbenennung.puml` to document the planned renaming and structural updates to core domain entities.
- Visualized key contexts (`Event Management`, `Billing`, `Competition`, `Registration`, `Actor`) and their relationships.
- Included recommendations for simplification of naming conventions in Clean Architecture.
This commit is contained in:
Stefan Mogeritsch 2026-04-08 14:12:04 +02:00
parent 7d8596570a
commit 8f0640810b

View File

@ -0,0 +1,158 @@
@startuml
skinparam handwritten false
skinparam monochrome false
skinparam packageStyle rectangle
skinparam shadowing false
hide empty members
title Domain Model: Umbenennung & Erweiterung (Soll-Zustand)
package "Event Management Context" {
class Veranstaltung <<Tenant Boundary>> {
+ id: UUID
+ name: String
+ ort: String
+ startDatum: LocalDate
+ endDatum: LocalDate
-- ZNS.zip Upload (Stammdaten) --
}
class Austragungsplatz {
+ id: UUID
+ name: String (z.B. "Waldarena")
+ typ: String ("Austragungsplatz", "Vorbereitungsplatz")
+ sparte: SparteE [0..1]
}
class Turnier {
+ id: UUID
+ turnierNummer: String (z.B. "26128")
+ sparte: SparteE
+ kategorie: TurnierkategorieE
+ nennschluss: DateTime
+ einschraenkungen: List<TeilnehmerKreisE>
-- n2-xxxxx.dat Upload --
+ turnierbeauftragterId: UUID
}
class Ausschreibung {
+ id: UUID
+ titel: String
+ status: AusschreibungsStatusE
}
}
package "Billing Context" {
class TurnierArtikel {
+ id: UUID
+ name: String (z.B. "Ansage", "Heu")
+ preis: Money
+ typ: String ("AUTOMATISCH", "MANUELL")
}
class Konto {
+ id: UUID
+ saldo: Money
}
}
package "Competition Context" {
class Bewerb {
+ id: UUID
+ bewerbNummer: Int (z.B. 14)
+ bezeichnung: String (z.B. "Standardspringprüfung")
+ beschreibung: String (z.B. "Pony Einsteiger Cup")
+ klasse: String (z.B. "LM")
+ richtverfahren: PruefungsTypE
+ aufgabe: String (z.B. "R1")
+ geldpreisAusbezahlt: Boolean
+ reitdauerMinuten: Int
+ umbauMinuten: Int
+ besichtigungMinuten: Int
--
+ teilungsTyp: AbteilungsTeilungsTypE (+ MANUELL)
}
class RichterEinsatz {
+ funktionaerId: UUID
+ position: String (z.B. "C", "Aufsicht")
}
class Abteilung {
+ id: UUID
+ abteilungsNummer: Int
+ bezeichnung: String
}
}
package "Registration Context" {
class Nennung {
+ id: UUID
+ status: NennStatusE
+ istNachnennung: Boolean
+ reiterId: UUID
+ pferdId: UUID
}
class NennungsTransfer {
+ id: UUID
+ ursprungsNennungId: UUID
+ neueNennungId: UUID
}
}
package "Actor Context (Masterdata)" {
class Reiter {
+ id: UUID
+ name: String
}
class Pferd {
+ id: UUID
+ name: String
}
class Funktionaer {
+ id: UUID
+ name: String
}
}
Veranstaltung "1" *-- "N" Austragungsplatz
Veranstaltung "1" *-- "N" TurnierArtikel
Veranstaltung "1" *-- "N" Turnier
Turnier "1" *-- "1" Ausschreibung
Turnier "1" *-- "N" Bewerb
Bewerb "1" *-- "N" Abteilung
Bewerb "1" *-- "N" RichterEinsatz
Bewerb "N" --> "1" Austragungsplatz : "findet statt auf"
Abteilung "1" <-- "N" Nennung : "teilt zu"
Bewerb "1" <.. "N" Nennung : "meldet für (Denormalisiert)"
Nennung "1" <-- "N" NennungsTransfer : "dokumentiert Storno/Umbuchung"
TurnierArtikel "1" <-- "N" Konto : "bucht"
note right of Bewerb
**Namens-Konvention (Das "Dom"-Präfix):**
Aktuell heißt diese Klasse im Code z.B. `DomBewerb` (in entries-domain)
und `Bewerb` (in entries-service/Repository).
Der Prefix `Dom` wurde zur Unterscheidung
von DTOs (Data Transfer Objects) und
DB-Entities genutzt.
Ist es clever das zu ändern?
-> Ja! In Clean Architecture sollte die
Kern-Domäne den "sauberen" Namen tragen
(`Bewerb`). Die DB-Klasse heißt dann `BewerbEntity`
bzw. `BewerbTable` und das Transfer-Objekt `BewerbDto`.
Das gleiche gilt für `DomVeranstaltung` -> `Veranstaltung`,
`DomTurnier` -> `Turnier`, `DomAusschreibung` -> `Ausschreibung`,
`DomAbteilung` -> `Abteilung`, `DomNennung` -> `Nennung`
und `DomNennungsTransfer` -> `NennungsTransfer`.
end note
@enduml