Crad's .NET Blog

L'UGIblog di Marco De Sanctis
posts - 190, comments - 457, trackbacks - 70

NHibernate

Un eccezionale ORM open source
[NHibernate] Mapping di un dictionary

Non mi stancherò mai di decantare la versatilità di NHibernate nel supportare domain model eterogenei. Esempio pratico: il nostro sito internet ha un sacco di pagine pressoché statiche, tipo il classico "Chi siamo", "Mission dell'Azienda", ecc.ecc. Vogliamo permettere all'amministratore di inserire questi dati nel DB, ma vogliamo anche lasciarci la strada aperta ad aggiunte future, così se domani il cliente si sveglia e vuole anche una bella pagina con i contatti, possiamo aggiungerla senza modificare lo schema. Un'idea può essere quella di contenere tutti questi dati all'interno di un bel Dictionary, ma come lo mappiamo con NHibernate? Presto detto, basta...

posted @ martedì 5 febbraio 2008 02:12 | Feedback (8) | Filed Under [ NHibernate ]

Un buon esempio di IoC e separation of concerns

Parlo di Cuyahoga, il noto CMS basato su Castle Windsor e NHibernate. Incuriosito da questo post di Ayende ieri ne ho spulciato un po' i sorgenti. E visto che li considero didatticamente interessanti, ve li consiglio. Certo, non è da prendere tutto come oro colato (il modulo del Forum, ad esempio, espone tutti i servizi in una grande, enorme, monolitica classe, che accede direttamente a NHibernate, brrrrr...) però può essere una buona sorgente per qualche idea. Tanto per dirne una, mi è piaciuta la strutturazione del Data Access Layer che sfrutta la "trasversalità" di NHibernate: IUserDao espone solo i servizi specifici dell'utente...

posted @ giovedì 29 novembre 2007 13:12 | Feedback (4) | Filed Under [ NHibernate Architettura ]

Automatic Properties di C# 3.0: servono davvero?

C# 3.0 permette una notazione compatta per le proprietà che si limitano semplicemente a wrappare un corrispondente field: 1: public string Descrizione { get; set; } Sulle prime mi è sembrata un'innovazione piuttosto utile, se non altro per le entity di dominio, che notoriamente non hanno logica e che risultano essere parecchio più veloci da scrivere e leggibili. Così utili che ho anche realizzato un accessor per farle supportare da NHibernate (lo trovate qui). Poi ho iniziato a sperimentare un po' e... beh... mi convincono fino ad un certo punto. Perchè? Beh, ovviamente devono avere...

posted @ mercoledì 8 agosto 2007 23:47 | Feedback (2) | Filed Under [ NHibernate Visual Studio Misc ]

NHibernate su Aspitalia.com

Oramai non ne faccio più mistero: chiacchierare di NHibernate mi piace dannatamente, cercare di contribuire alla sua diffusione ancora di più, sfruttarlo per scopi professionali è poi una vera goduria. Fatto sta che ho rotto talmente le scatole a qualcuno, che alla fine abbiamo convenuto che era meglio mettere nero su bianco e vedere cosa si riusciva a tirar fuori. Risultato? Oltre le più rosee aspettative: un articolo introduttivo e *MOLTO* pratico, pubblicato oggi su Aspitalia.com, e addirittura uno speciale su quello che è un po' l'ORM del momento. Ringrazio tantissimo Daniele, Ricky, Ugo e Marco di Aspitalia.com che mi hanno supportato...

posted @ martedì 19 giugno 2007 15:01 | Feedback (3) | Filed Under [ NHibernate ]

[NH e le feature semisconosciute] La cache di 2° livello

E' innegabile che, nell'ultimo anno, si faccia un gran parlare in rete di O/RM ed in particolare di NHibernate. Capita sempre più spesso di leggere un post qui, un articolo lì e soprattuto tante, tantissime domande su forum e newsgroup di persone in qualche modo affascinate o incuriosite da questo modo relativamente nuovo di gestire le problematiche di persistenza. Ciò che mi ha sempre colpito è come, a ragion veduta, in molti vedano in NHibernate un qualcosa che finalmente si occupa di scrivere SQL al posto nostro. Ma in realtà c'è molto, molto di più in quel dannato assembly, features che tante volte...

posted @ giovedì 7 giugno 2007 22:57 | Feedback (2) | Filed Under [ NHibernate ]

NHibernate Search

Come segnalato da Ayende, è oramai praticamente completo NHibernate.Search. Cos'è? E' l'integrazione con NHibernate del famoso full-text search engine Lucene. La documentazione non è ancora disponibile, ma il funzionamento è assolutamente analogo a quello della controparte Java, che si trova qui. Non vedo l'ora di dargli un'occhiata.   Technorati tags: NHibernate

posted @ lunedì 2 aprile 2007 15:34 | Feedback (0) | Filed Under [ NHibernate ]

Stasera la chat sugli ORM

Ancora grazie ad Emanuele per aver pensato a questa iniziativa. Farò di tutto per non mancare, perché l'argomento mi appassiona tantissimo (oltre che essere di estrema attualità). Appuntamento alle ore 21, le modalità di partecipazione sono descritte in qui.

posted @ lunedì 22 gennaio 2007 12:58 | Feedback (0) | Filed Under [ NHibernate Architettura Misc ]

[NHibernate] Session.Get o Session.Load ?

L'interfaccia ISession di NHibernate mette a disposizione due metodi per recuperare una entity da DB a partire dal suo identificativo, ossia ISession.Get e ISession.Load. La prima differenza che salta all'occhio è che, nel caso l'oggetto voluto non esista, Get ritorna una null-reference, mentre Load solleva una ObjectNotFoundException. Molto più importante, secondo me, è però il fatto che, nel caso in cui il tipo sia configurato come Lazy Initializable (quindi attributo Lazy="true" nel mapping della classe), Session.Load restituisce il proxy e non l'oggetto stesso. E' un aspetto molto comodo tutte le volte in cui abbiamo bisogno di una reference ad...

posted @ martedì 16 gennaio 2007 17:03 | Feedback (0) | Filed Under [ NHibernate ]

[NHibernate] Nuovo connection model, cosa cambia?

Janky ha scritto in questo post che una delle novità della nuova beta di NHiberante 1.2.0 è il nuovo connection model. Qual è la differenza? Piccola premessa: è (ed era) possibile fornire alla session una propria connessione, creata esternamente a NHibernate, quindi; in questo caso sarà sempre responsabilità dell'utente gestirne il ciclo di vita. E nel caso (più comune) in cui lasciamo fare a NHibernate? Prima di beta 3 La connessione veniva aperta alla prima occasione in cui si rendeva necessaria un'interazione con il DB e da quel momento restava aperta fino alla dispose della Session o ad una chiamata...

posted @ giovedì 11 gennaio 2007 14:02 | Feedback (0) | Filed Under [ NHibernate ]

La mia sull'evento di DotNetMarche

Scrivo solo oggi perché ho avuto un weekend piuttosto intenso! Che dire... contentissimo! Intanto mi sento di ringraziare Gian Maria, Diego, Stefano e tutti gli altri ragazzi per la splendida organizzazione, per il caffé nel termos che mi ha salvato dal crollo, per i pasticcini che invece hanno salvato Igor e soprattutto l'albero di natale aziendale, senza il quale io e Janky non avremmo potuto sistemare le ultime robine sulle slide durante la sessione di Simone (già... perché da che mondo è mondo, le slide e le demo devono essere completate 30 secondi prima di parlare, altrimenti porta sfiga). Mi spiace di...

posted @ lunedì 18 dicembre 2006 13:01 | Feedback (1) | Filed Under [ .Net 2.0 NHibernate Misc ]

NHibernate e lo special case

Come fare per utilizzare il pattern SpecialCase con NHibernate?

C.p.l.

posted @ lunedì 20 novembre 2006 01:04 | Feedback (5) | Filed Under [ NHibernate Architettura ]

Un articolo da incorniciare...

...per farci le preghierine la sera. Già, quello di Ayende su MSDN che trovate qui. Correte, leggetelo, rileggetelo, bevete un bicchier d'acqua e leggetelo un'altra volta. Strepitoso. Punto.

posted @ venerdì 10 novembre 2006 22:22 | Feedback (3) | Filed Under [ NHibernate Architettura ]

NHDomainMapper (Supertanga edition) is out!!!

Stento ancora a crederci... trattengo con fatica la gioia... il domani ha tinte più rosee... piove governo ladro! E' uscita la primissima release di NHDomainMapper!! Non scrivo altro, anche perché non avrebbe senso: oramai avrete tutti abbandonato questa pagina per volare a quella del download! Una sola nota: ogni bug che troverete, sappiate che è colpa di Janky, ghghhg!!

posted @ domenica 22 ottobre 2006 23:53 | Feedback (0) | Filed Under [ .Net 2.0 NHibernate ]

Cosa sarebbe il mondo senza NHDomainMapper?

Avvertenza: questo è un post autocelebrativo, Janky mi ha pagato profumatamente per scriverlo, quindi se vi farà venire il diabete prendetevela con lui. Windows Vista è quasi in RTM? Avete provato Orcas per la prima volta? Office 2007 lo usate già da un po'? Vi piace HappySign di Igor? STICA!!! Siete il nulla: sta per arrivare NHibernate Domain Mapper rel.0.1 alpha codename SUPERTANGA!! Ora, visto che un rilascio ufficiale non c'è ancora stato, purtroppo credo che difficilmente che ci sia qualcuno, oltre me e il bravo Sudano, in possesso di queste fantasmagoriche righe di codice C#. Tanto per dare un'ulteriore...

posted @ giovedì 5 ottobre 2006 01:29 | Feedback (6) | Filed Under [ .Net 2.0 NHibernate Visual Studio Windows Forms ]

[NHibernate] Usare chiavi composte

Quarto articolo della serie su NHibernate, questa volta a proposito del supporto a DB Schema legacy che contengano chiavi primarie comprendenti più colonne. Lo spunto mi è venuto da un dubbio esposto da Luca Beretta qualche giorno fa, vediamo un po' se ho preso due piccioni con una fava, magari riuscendo anche a risolvergli il problema! In questi mesi sto studiando (e soprattutto utilizzando) così tanto NHibernate che magari un giorno impazzisco, mi monto la testa e organizzo anche un corso, ehehehe!! powered by IMHO 1.3

posted @ mercoledì 20 settembre 2006 02:09 | Feedback (0) | Filed Under [ NHibernate ]

E ora NHibernate ha anche le stored procedures

O meglio, le avrà, dato che questa nuova features è per il momento stata introdotta esclusivamente a livello di sorgenti, che comunque si possono scaricare dal server SVN. Ayende ne parla un po' sul suo blog, con tanto di esempio pratico su come specificarle nel file di mapping. La gestione è probabilmente un po' macchinosa e, soprattutto, IMHO è perfettamente inutile nel 99% dei casi, perché si manda allegramente in malora tutta la flessibilità che un ORM può dare nel tuning delle query. Però, dato che la gente le chiedeva a gran voce, sappiate che son lì. powered by IMHO 1.3

posted @ martedì 19 settembre 2006 10:48 | Feedback (11) | Filed Under [ NHibernate ]

[NHibernate] Oracle e la concorrenza ottimistica

Sto utilizzando NH in un progetto che si appoggia su DB Oracle e mi sono imbattuto in una piccola grana che ha a che fare con lo "strano" modo di questo RDBMS di gestire i campi VARCHAR. C.p.l.

posted @ giovedì 7 settembre 2006 10:03 | Feedback (2) | Filed Under [ NHibernate ]

[NHibernate] Oggi parliamo di IInterceptor

Nel terzo articolo su NHibernate parliamo dell'oggetto Interceptor e di come può essere utilizzato per personalizzare il comportamento standard di una Session. L'esempio proposto, questa volta, riguarda la realizzazione di un sistema di Audit che tenga traccia degli autori delle modifiche effettuate sulle entity. Devo ringraziare Giancarlo per avermi indicato questa come la soluzione più comoda per risolvere questa problematica così comune. Chi fosse interessato, lo trova a questo link. Ciao powered by IMHO 1.3

posted @ lunedì 4 settembre 2006 01:42 | Feedback (0) | Filed Under [ NHibernate ]

[NHibernate] Inheritance Mapping

Dopo il precedente, ho pensato di scrivere un altro piccolo articolo su NHibernate, questa volta a proposito del mapping di classi in relazione di ereditarietà tra di loro, con tanto di nuova applicazioncina di esempio Chi fosse interessato alla lettura, può trovarlo seguendo questo link. powered by IMHO 1.3

posted @ giovedì 24 agosto 2006 03:15 | Feedback (1) | Filed Under [ NHibernate ]

[NHibernate] LazyLoad non solo sulle collection

Il LazyLoad in NHibernate non si limita solo ai casi di relazioni Master/Detail: questo framework, infatti, mette a disposizione uno strumento estremamente completo, che permette di caricare al momento opportuno qualsiasi entity. Visto che il 99% degli esempi che si trovano in rete riguardano però solo il primo caso, ho scritto un piccolo articolo che approfondisce un po' il funzionamento del Lazy Load sviscerandolo un pochino di più (non molto, eh! ), con tanto di applicazioncina di esempio. Spero di aver fatto una cosa gradita, trovate tutto a questo link. Se l'idea vi piace, mandatemi qualche feedback, così magari posso proseguire la serie...

posted @ lunedì 21 agosto 2006 02:30 | Feedback (2) | Filed Under [ NHibernate ]

Anche NHibernate Domain Mapper si è CodePlexato

Già già, finalmente stasera (a tempo di record) hanno attivato il progetto di NHibernate Domain Mapper su CodePlex. Per ora non abbiam messo su ancora nulla, lo farò nei prossimi giorni, ma speriamo di riuscire ad approfittare delle ferie per tirar fuori una prima early build, così potrete anche voi dare un'occhiata a quello che, per me e Janky, è diventato il passatempo di quasi ogni sera e ogni weekend. Se poi ci volete dare anche una mano... powered by IMHO 1.3

posted @ lunedì 7 agosto 2006 22:02 | Feedback (0) | Filed Under [ NHibernate Visual Studio ]

Ancora su DAL, NHibernate e ORM fatti a mano

Mi ricollego a quanto già scritto sul mio blog e alla discussione nata su quello di Imperugo, a proposito dell'argomento "ORM fatti in casa", perché stamattina mi sono imbattuto in un interessante post di Ayende a proposito delle performance di NHibernate. Tutto è nato da un post in cui si confrontavano la velocità di questo OR/M e ADO.NET; beh... sono d'accordo con chi dice che ovviamente NH non può essere più veloce di ADO.NET per il semplice fatto che è un layer costruito sopra ad ADO.NET. Ma come si è ripetuto più spesso anche da queste parti, lo scopo di NH è quello...

posted @ domenica 6 agosto 2006 10:32 | Feedback (0) | Filed Under [ NHibernate ]

I brevetti software colpiscono ancora...

... e purtroppo neanche Hibernate ne è immune. Da questo post di Roy Osherove che cita una notizia di ORMappers.com: "Red Hat will face a patent infringement lawsuit this week over whether Hibernate, which it inherited from JBoss violates ORM patents held by FireStar Software. FireStar alleges that Hibernate violates U.S. patent 6,101,502 -- " Object model mapping and runtime engine for employing relational database with object oriented software." [NetworkWorld.Com] Si tratta di un brevetto che riguarda la generazione di strutture di DataBase a partire da modelli a oggetti e viceversa. Mah......

posted @ domenica 23 luglio 2006 19:11 | Feedback (0) | Filed Under [ NHibernate Misc ]

La Unit of Work e le Web Apps

Ieri Imperugo di ASPItalia ha pubblicato un post a proposito di NHibernate sul suo blog e ne è seguita una discussione parecchio interessante con nostromo, Daniele e ricky, proseguita con quest'ultimo anche su MSN. Un passo di tutto questo disquisire era qualcosa del tipo: "ha senso una Unit of Work in una Web Application, in cui il codice lato server è solitamente stateless?" Secondo Riccardo "una UoW ha il compito di creare un contesto transazionale a livello di logica applicativa, cosa che nel web per motivi prestazionali è preferibile fare in altri modi" e quindi scegliere se utilizzarla o meno dipende dai casi;...

posted @ giovedì 20 luglio 2006 13:34 | Feedback (17) | Filed Under [ NHibernate Architettura ]

NHibernate e le collection type-safe

Una delle maggiori problematiche per chi ha avuto qualche esperienza con NHibernate è il fatto che questo O/RM non gestisce direttamente collection strongly-typed. Ammetto di non aver cercato moltissimo in giro per la rete, ma in quei 3 o 4 esempi che ho guardato, le business entities avevano sempre la forma public class Master{    // ... more code ...    private IList details;    public IList Details    {        get { return details; }    }} Questo tipo di implementazione pone alcune problematiche: oltre al fatto di essere weakly-typed, può funzionar bene se viene utilizzata in una pagina ASP.NET, grazie al databinding poco "interattivo", ma se proviamo a collegarla ad una windows forms perdiamo un sacco di funzionalità a cui eravamo abituati usando i DataSet (il refresh dei dati sullo schermo...

posted @ mercoledì 22 marzo 2006 01:22 | Feedback (9) | Filed Under [ .Net 2.0 NHibernate ]

Powered by:
Powered By Subtext Powered By ASP.NET