Alkampfer's Place

Il blog di Gian Maria Ricci
posts - 659, comments - 871, trackbacks - 80

My Links

News

Gian Maria Ricci Mvp Logo CCSVI in Multiple Sclerosis

English Blog

Tag Cloud

Article Categories

Archives

Post Categories

Image Galleries

I miei siti

Siti utili

Scegliere bene i livelli di accesso con nhibernate.

Nhibernate può lavorare direttamente con i campi privati di una classe dato che vi accede tramite reflection. Questa apparente violazione della privacy dell'oggetto porta comunque notevoli benefici in termini di pulizia di codice. Ad esempio supponiamo di avere una nostra classe il cui campo di identita per il database è un int32 autogenerato da una colonna identity. In questa situazione naturalmente andare a modificare un id manualmente è un operazione che porta sicuramente a molti problemi, a questo punto basta dichiarare la proprietà readonly.

public virtual Int32 Id {

get { return mId; }

}

private Int32 mId = 0;

Naturalmente nel mapping è necessario indicare a nhibernate di accedere al field privato.

<id access="field" name="mId" column="sect_id" type="int" unsaved-value="0">

<generator class="identity" />

</id>

In questo semplice modo possiamo essere sicuri che la proprietà Id non verrà mai modificata o toccata durante l'elaborazione della classe dato che l'identità sul database di un oggetto deve essere lasciata all'ORM. Personalmente trovo questa proprietà molto interessante ed aspetto i commenti di Janky a riguardo  :)

Alk.

Print | posted on martedì 6 febbraio 2007 16:25 |

Feedback

Gravatar

# re: Scegliere bene i livelli di accesso con nhibernate.

Se posso permettermi, anche se non sono Janky :P, anch'io uso il medesimo approccio, sia per quanto riguarda le chiavi (a patto che non siano composite), sia per le collection.

Occhio che potrebbe non funzionare in condizioni di medium trust.
06/02/2007 16:35 | Marco De Sanctis
Gravatar

# re: Scegliere bene i livelli di accesso con nhibernate.

Si, infatti potrebbero esistere problemi con medium trust, ma nel mio caso non ho di questi problemi. La cosa interessante è che tempo fa parlavo con un collega di come un orm impatta sul design delle classi, ad esempio sul fatto che debbo avere tutte le proprietà e i metodi virtual per permettere il lazy. Bisogna invece dire che in alcuni casi come questo nhibernate permette un design più pulito delle classi, in un approccio più tradizionale, ad esempio con un table module la proprietà Id spesso deve essere esposta in get/set e questo è sicuramente un design meno sicuro.

Cmq, la flessibilità di nhibernate è impressionante, mi chiedo come facevo a lavorare senza :D

Alk.
06/02/2007 17:12 | Gian Maria
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET