Was sonst macht eine Entität aus? Wenn es um reine Datenhaltung in
einem "Objekt" (eher Record) geht würde ich das als Data Transfer
Object (DTO) bezeichnen, nicht als Entität.
> Selbst eine Validierung kann kontext abhängig sein und sollte dass
> dann nicht von einer eigenen Komponente abgebildet werden?
Validierung liegt oft außerhalb der Entitäten. Mindestens dann, wenn
für die Validierung andere Entitäten oder Services (z.B. um eine PLZ
zu prüfen) benötigt werden.
Viele Grüße
Stefan
Wenn nun die Entität selbst prüft, so bekommt ihr Kontrakt
Abhängigkeiten zu anderen Kontrakten weil sie ja z.bps.
ISperrzeiten.CheckConflicts(...) triggern muss.
Diese Bindung sorgt dafür dass Kontrakte in einer bestimmten
Reihenfolge erstellt werden muss und ein wesentlicher Vorteil der
Entkopplung durch DI &Co verloren.
Bei Komplexeren oder dynamischeren Anwendungen scheint mit das
TransactionScript Pattern nicht ausreichend.
DDD bringt dann aber die von dir genannten Probleme.
dass eine Entität innerhalb des gleichen Bereichs von 2 Komponenten
Benötigt wird.
Mal angenommen man hat einen Anwendung welche SourceCodes verwaltet.
Nehmen wir z. Bsp. eine Termin-Entität
Eine Validierung könnte sein Start < Ende.
Soweit ist alles ok.
Dass diese Validierung in der Entität statt findet, ist sicher
vorteilhaft, da es das Handling vereinfach.
Das Problem fängt aber z.bsp. bei dem Thema "Terminkollision" an.
Es gibt Bereiche bei denen Kollisionen egal sind => Keine Validierung
aber in anderen Bereiche in der gleichen Domäne (vielleicht einfach
nur ein anderer Benutzer oder andere Termin-Art) bedeutet eine
Kollision ein ungültiger Zustand. Ich denke hierfür sollte man keine
eigene Entität erstellen.
Bei Komplexeren oder dynamischeren Anwendungen scheint mit das
TransactionScript Pattern nicht ausreichend.
DDD bringt dann aber die von dir genannten Probleme.
2.Strukturelle Organisation
Das Bounded Contextes Prinzip scheint hier nicht wirklich zu helfen.
So wie ich es verstehe geht es hier um ein Mapping zwischen
verschiedenen Entitäten da sich in verschiedenen DomainSpezifischen
Bereichen eine andere Bedeutung haben.
Die Idee hintendran finde ich sehr wichtig aber es kann ja auch sein,
dass eine Entität innerhalb des gleichen Bereichs von 2 Komponenten
Benötigt wird.
Mal angenommen man hat einen Anwendung welche SourceCodes verwaltet.
So kann es folgendes Szenario geben:
Eine SourceCode Entität bei einem SourceCodeAdapter, welcher
SourceCodes schreiben und lesen kann.
Eine Komponente welche sich um Versionierung kümmert und mit einer
VersionedItem Entität. Diese VersionedItem Entität beinhaltet nun
SourceCode.
Ich fände es nur logisch und auch für denjenigen der die Versionierung
verwendet , dass er hier als SubObjekt eine SourceCode Entität hätte.
Allerdings fände ich einen Verweis zwischen den Kontrakten des
CodeAdapter und Versionierungskomponente unnötig kompliziert, oder?
In so einem Scenario stellt sich mir die Frage ob es nicht besser wäre
ein Entitäten Assembly für die „SubDomaine“ „SourceCodeManagement“ zu
erstellen um unnötige Referenzen zu vermeiden.
Oder bin ich da auf dem Holzweg?