Próbuję zacząć w świecie "DDD z C#". Używam NHibernate jako narzędzia ORM, próbując w ten sposób opracować model PI (Persistence Ignorance). Jednak w niektórych moich podmiotach (które są reprezentowane jako POCOS) mam reguły biznesowe w ustawieniach moich właściwości. Na przykład mam jednostkę "Użytkownik", która ma flagę wskazującą, czy ten użytkownik jest zablokowany, czy też nie, gdy ta flaga jest prawdziwa, drugie pole o nazwie "Data bloku" musi zostać automatycznie wypełnione zgodnie z bieżącą datą. Wszystko wydaje się bardzo jasne i proste, ale problem pojawia się w momencie, gdy odzyskiwam użytkowników, którzy już utrwalili się w bazie danych, nawet jeśli zablokowani użytkownicy będą mieli aktualizację "Zablokowanych dat" do bieżącej daty, zgodnie z odrobiną ta logika. Początkowo myślałem, że w drugiej flaga "isLoaded" oznacza, że obiekt jest uwodniony przez NHibernate, a następnie ta logika nie zostanie uruchomiona, jednak nie wydawało się to PI. Wszelkie sugestie, jak to poprawić?Model domeny z problemem projektowania Nhibernate
6
A
Odpowiedz
4
Możesz zdefiniować strategię dostępu do pola w swoim mapowaniu dla właściwości IsBlocked. Zasadniczo powiesz NHibernate, aby używał bazowego pola prywatnego (_isBlocked) zamiast właściwości, a zatem logika ustawiacza w właściwości IsBlocked nie zostanie wykonana.
This SO question ma dobrą odpowiedź na temat strategii dostępu.
Oficjalny NHibernate documentation.
Jeśli używasz Fluent NHibernate do mapowania, to jak można to określić:
Map(x => x.IsBlocked).Access.CamelCaseField(Prefix.Underscore);
4
Oprócz rozwiązania problemu Miroslavs dla NHibernate, bym naprawdę polecam odejście od logiki za oddanie nieruchomości seterów, zwłaszcza gdy inne pola wymagają zmiany.
public void Block()
{
_isBlocked = true;
_blockedDate = DateTime.Now;
}
Zobacz odpowiedzi na this question, dlaczego.
Powiązane problemy
- 1. Jak zaimplementować trójwarstwowy model z NHibernate?
- 2. Repozytorium MVC - Model domeny a model podmiotu
- 3. Wartość Injecter: Dto do Modelu Domeny (NHibernate)
- 4. Dlaczego dwie klasy, model widoku i model domeny?
- 5. Jeden model domeny, wiele widoków json
- 6. Silverlight Konstruktor wtrysku w widoku Model + tryb projektowania
- 7. Architektura NHibernate?
- 8. SSH - Python z problemem paramiko
- 9. Jak narazić model domeny Grails za pomocą OData?
- 10. Jak zignorować/utrwalić wartości w MVC, gdy model widoku nie ma tyle pól, co model domeny?
- 11. Obscure błąd NHibernate/Fluent NHibernate
- 12. Jak zintegrować NHibernate z Lucene.Net
- 13. ViewPager z problemem TabLayout z AnimatedVectorDrawable
- 14. Model z bogatymi domenami z zachowaniami i ORM
- 15. NHibernate wydajność nawodnienie
- 16. PostgreSQL macports nie może połączyć się z problemem
- 17. xsl problemem nazw
- 18. Django reset_password_confirm TemplateSyntaxError problemem
- 19. UIView setFrame problemem
- 20. Generic problemem fabryka klasa
- 21. OpenCV findContours funkcja problemem
- 22. Django MongoDB problemem
- 23. CruiseControl.NET wydawca email problemem
- 24. Entity Framework i problemem
- 25. spływu problemem przecinek, javascript
- 26. problemem Validation z JSP i Eclipse
- 27. ImageMagick przekonwertować gif z problemem przejrzystości
- 28. Ruby on Rails problemem to_json z: include
- 29. ASP.NET MVC z uruchomionym problemem wdrażania IIS7
- 30. Fluent NHibernate AutoMapping z dyskryminatorem
+1 za tę rekomendację –