Ich versuche, in der Welt "DDD mit C#" zu beginnen. Ich verwende NHibernate als mein ORM-Tool und versuche so, ein PI (Persistence Ignorance) -Modell zu entwickeln. Jedoch, in einigen meiner Entitäten (die als POCOS dargestellt werden) habe ich Geschäftsregeln in den Setter meiner Eigenschaften. Zum Beispiel habe ich eine Entität "Benutzer" mit einem Flag, das anzeigt, ob dieser Benutzer blockiert ist oder nicht, wenn dieses Flag wahr ist, muss ein zweites Feld namens "Block Date" automatisch mit dem aktuellen Datum gefüllt werden. Alles scheint sehr klar und einfach, aber das Problem entsteht in dem Moment, dass ich die Benutzer wiederherstellen, die bereits in der Datenbank, obwohl die blockierten Benutzer ihre "Blocked Dates" update auf das aktuelle Datum, entsprechend haben diese Logik. Zuerst dachte ich in einer zweiten Flagge "isLoaded", die anzeigen würde, dass das Objekt von NHibernate hydratisiert wird und dann würde diese Logik nicht gestartet werden, jedoch schien dies nicht wie PI. Irgendwelche Vorschläge, wie man das verbessert?Domain-Modell mit Nhibernate Design-Problem
6
A
Antwort
4
Sie können die Feldzugriffsstrategie in Ihrem Mapping für die IsBlocked-Eigenschaft definieren. Im Grunde würden Sie sagen, dass NHibernate das zugrunde liegende private Feld (_isBlocked) anstelle der Eigenschaft verwendet und daher Ihre Setter-Logik in der IsBlocked-Eigenschaft nicht ausgeführt wird.
This SO question hat eine gute Antwort auf Zugriffsstrategien.
Offizielle NHibernate documentation.
Wenn Sie Fluent NHibernate für die Zuordnung verwenden, ist dies, wie Sie es definieren könnte:
für das NHibernate ProblemMap(x => x.IsBlocked).Access.CamelCaseField(Prefix.Underscore);
4
Neben Miroslavs Lösung, würde ich wirklich empfehlen davon ab, Logik hinter Eigenschaft weg Setter, besonders wenn andere Felder geändert werden müssen.
public void Block()
{
_isBlocked = true;
_blockedDate = DateTime.Now;
}
Siehe Antworten auf this question für warum.
Verwandte Themen
- 1. Android DialogFragment mit AppCompat-Designproblem
- 2. Interoperables flüssiges NHibernate + NHibernate + Linq zu NHibernate
- 3. Komplexe Abfragen mit NHibernate
- 4. dynamische Bestellung mit Nhibernate
- 5. Abhängigkeitsinjektion mit NHibernate-Objekten
- 6. Serialize DetachedCriteria mit nHibernate
- 7. Shaml mit NHibernate Contrib
- 8. Mapping mit NHibernate?
- 9. Bedingte Projektion mit NHibernate
- 10. Abfrage mit NHibernate
- 11. Fließfähiges NHibernate mit SQLite
- 12. Umgang mit NHibernate-Ausnahmen
- 13. bidirektionale Beziehungsmuster mit Nhibernate
- 14. Beginnen Sie mit Nhibernate
- 15. Using mvcContrib mit nhibernate
- 16. NHibernate mit falschem Tabellenalias
- 17. NHibernate QueryOver mit ManytoMany
- 18. nHibernate ManyToManyToMany mit fließendem
- 19. Nhibernate mit Microsoft System.Data.OracleClient
- 20. Suchvorschläge mit NHibernate Search
- 21. NHibernate 2 + Fluent Nhibernate mittelvertraulich
- 22. Obscure NHibernate/Fluent NHibernate Fehler
- 23. Wie Fluent NHibernate arbeitet mit NHibernate 3.x
- 24. Syntax um einen NHibernate Filter mit Fluent Nhibernate zu definieren?
- 25. Kein Persister für ... {SUBCLASS} NHibernate mit Fluent NHibernate
- 26. NHibernate Second Level Cache mit NHibernate Linq Provider 1.0
- 27. Fluent NHibernate/NHibernate Vererbung Frage
- 28. Bidirektionale HQL-Abfrage mit NHibernate
- 29. NHibernate 3.0 Konfiguration mit ODP.NET
- 30. Mapping XML-Datentyp mit NHibernate
+1 für diese Empfehlung –