Crad's .NET Blog

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

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 quando aggiungiamo un elemento alla collection, tanto per dirne uno...). Non mi dilungo oltre, se non per dire che le soluzioni provate (che vanno dal tentativo di utilizzare BindingList<T>, a quanto proposto da Ayende Rahien o a quest'altra alternativa di Andrew Arnott) non mi convincono al 100%.

Per fortuna, però, non ho girovagato in rete invano : mi sono imbattuto qui, dove ho trovato un'ottima collection generic, che implementa IBindingList, e che a prima vista (dopo una lettura del codice sorgente) sembra essere addirittura migliore della BindingList<T> contenuta nel FX 2.0, dato che supporta anche sorting e find. E' molto generale e quindi può essere utilizzata anche da chi non si avvale di NHibernate, ma, in caso contrario, viene fornita anche di un accessor specifico da utilizzare nei file di mapping. Certo, non derivando da PersistentCollection FOOOORSE ha bisogno di qualche ritocco per funzionare correttamente con NHibernate, oltre al fatto che a me piacerebbe implementasse anche IComponent per poterla integrare nel designer di Visual Studio, ma credo si tratti veramente di un ottimo lavoro! Da domani proverò a metterci un po' le mani sopra...

powered by IMHO 1.3

Print | posted on Wednesday, March 22, 2006 12:22 AM | Filed Under [ .Net 2.0 NHibernate ]

Powered by:
Powered By Subtext Powered By ASP.NET