Scharfe Architekturwertobjekte
-
12-12-2019 - |
Frage
Ich überprüfe den Code der scharfen Architektur.Soweit ist es cool, aber ich habe Probleme, meinen Kopf umzusetzen, wie DDD-Wertobjekte im Rahmen implementiert werden (scheint dies nicht in diesem Code zu erwähnen).Ich gehe davon aus, dass die Basis-Entitätsklasse und die Repository-Basis nur für Entitäten verwendet werden sollen.Alle Ideen zum Implementieren von Wertobjekten im Rahmen?
Lösung
Im scharfen Bogen gibt es ein KlassenvalueObject in Namespace Sharparch.Domain.DomainModel. Dieses Objekt erbt von BaseObject und überschreibt die== und!= Operatoren und die Equal () und GetHashCode () -Methoden. Die Methode-Überschreibungen nennt nur die BaseObject-Versionen dieser beiden Methoden, die wiederum GetttypespecificSignatureProperties () -Methode verwenden, um die Eigenschaften in den Gleichstellungsvergleich zu erhalten.
untere Zeile ist, dass die Gleichheit der Entität von
bestimmt wird- .
- Referenz Gleichheit
- derselbe Typ?
- id's sind das gleiche
- Vergleich aller mit dem [Domainsignatur] -attribut dekorierten Eigenschaften
- Referenz Gleichheit
- derselbe Typ?
- Vergleichen Sie alle öffentlichen Eigenschaften
für ValueObjects, das gleiche Methode von BaseObject wird verwendet
- .
Dies ist ein bisschen vereinfacht, ich schlage vor, Sie erhalten den neuesten Code von GitHub und lesen Sie den Code in den genannten 3 Klassen selbst durch.
edit: bezüglich der persistenz, dies also frage < / a> könnte helfen. Anders als das beziehen sich auf die offizielle NH- und FLUENT-NH-Dokumentation
Andere Tipps
Werteobjekte sind einfache Objekte, die keine Basisklasse benötigen.(Die einzigen Grundlagen haben Basisklassen, um Gleichheit basierend auf der Identität bereitzustellen).Implementieren eines Wertobjekts bedeutet einfach, eine Klasse zu erstellen, um einen Wert aus Ihrer Domäne darzustellen.Viele Zeiten von Wertobjekten sollten unveränderlich sein und Gleichheitsvergleichsmethoden bereitstellen, um die Gleichstellung an andere Wertobjekte desselben Typs zu bestimmen.Werfen Sie einen Blick hier .