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