2012-05-30 9 views
6

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

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.

+0

+1 per questa raccomandazione –

Problemi correlati