Sto cercando di iniziare nel mondo "DDD with C#". Uso NHibernate come strumento ORM, cercando quindi di sviluppare un modello PI (Persistence Ignorance). Tuttavia, in alcune delle mie entità (che vengono rappresentate come POCOS) ho delle regole aziendali nei setter delle mie proprietà. Ad esempio, ho un'entità "Utente" che ha un flag che indica se questo utente è bloccato o meno, quando questo flag è true un secondo campo chiamato "Block Date" deve essere compilato automaticamente con la data corrente. Tutto sembra molto chiaro e semplice, ma il problema sorge nel momento in cui sto recuperando utenti che sono già persistiti nel database, anche se gli utenti bloccati avranno il loro aggiornamento "Date bloccate" alla data corrente, secondo l' questa logica. Inizialmente ho pensato a un secondo flag "isLoaded" che indica che l'oggetto viene idratato da NHibernate e quindi questa logica non sarebbe stata avviata, tuttavia questo non sembrava PI. Qualche suggerimento su come migliorare questo?Modello di dominio con problema di progettazione di Nhibere
6
A
risposta
4
È possibile definire la strategia di accesso al campo nella mappatura per la proprietà IsBlocked. Fondamentalmente, diresti a NHibernate di utilizzare il campo privato sottostante (_isBlocked) anziché la proprietà e, quindi, la logica setter nella proprietà IsBlocked non verrà eseguita.
This SO question ha una buona risposta sulle strategie di accesso.
NHibernato ufficiale documentation.
Se si sta utilizzando Fluent NHibernate per la mappatura, questo è come si potrebbe definirlo:
Map(x => x.IsBlocked).Access.CamelCaseField(Prefix.Underscore);
4
Oltre alla soluzione Miroslavs per il problema NHibernate, Consiglio vivamente allontanandosi dal mettere logica dietro immobili setter, specialmente quando altri campi devono essere cambiati.
public void Block()
{
_isBlocked = true;
_blockedDate = DateTime.Now;
}
Vedere le risposte a this question per il motivo.
Problemi correlati
- 1. Modello di dominio anemico e modello di dominio in un semplice progetto basato sul dominio
- 2. Progettazione modello di errore
- 3. Modello di progettazione DAO
- 4. modello di dominio anemico rispetto al modello di dominio
- 5. problema di dominio incrociato con Jquery
- 6. Modello di progettazione lavoratore
- 7. Frustrazione del modello di progettazione
- 8. Modello di progettazione per la mappatura di DTO contenenti raccolte secondarie sui modelli di dominio
- 9. Problema iframe di dominio incrociato
- 10. DDD - Modello di persistenza e modello di dominio
- 11. Progettazione basata su dominio con Zend
- 12. JPA - Problema di progettazione di entità
- 13. Implementazione modello di dominio Rich
- 14. Bestpractice - Mixing Visualizza modello con modello di dominio
- 15. Dilemma di selezione del modello di progettazione
- 16. Generics e database - un problema di progettazione
- 17. Perché due classi, modello di vista e modello di dominio?
- 18. Problemi di implementazione del modello di progettazione di fabbrica
- 19. Problema di progettazione dell'elaborazione simultanea MSMQ
- 20. Problema di progettazione orientata agli oggetti
- 21. Un modello di progettazione per i costruttori
- 22. primavera e il modello di dominio anemico
- 23. Strategia Modello di progettazione con contenitori IOC - Ninject specificatamente
- 24. Modello di progettazione MVVM per Android
- 25. Risorse del modello di progettazione CFML?
- 26. Middleware modello di progettazione in Node.js: Collegare
- 27. Un modello di dominio, più viste JSON
- 28. Identificazione delle entità figlio di progettazione guidata dal dominio
- 29. Google Analytics con il modello di progettazione MVP
- 30. Utilizzare correttamente il modello di progettazione singleton
+1 per questa raccomandazione –