Oggi sono blogorroico :-D, e quindi ci metto anche il terzo... se poi "il quattro vien da se" be allora siamo proprio alla frutta...

In questo caso parliamo di qualcosa che è ancora in una versione più che embrionale... è quasi tutto ancora nella mia testa... o meglio ben dettagliato sul fido OneNote.
Il problema è questo:

IMyEntity entity = whatEverDataProvider.GetMyEntity();
IMyCollection list = entity.Children;
Int32 count = list.Count;

if( count > 100 )
{
    foreach( var child in list )
    {
        //Do something with child
    }
}

e voi direte... ma dove sta il problema? sta sta... ;-) supponiamo che la collection "Children" sia caricata in modalità lazy e che, nell'esempio, contenga 90 elementi: bene stiamo caricando 90 "item" solo per fare un confronto con il Count di questi elementi. E giustamente voi potreste ribadire: si certo... bravo, fai un metodo GetCount() sul data provider...

IMyEntity entity = whatEverDataProvider.GetMyEntity();
Int32 count = whatEverDataProvider.GetChildrenCount( entity );

...etc

+1 sono perfettamente d'accordo, ma lo sviluppatore è pigro e se trova una proprietà Count usa quella anche se le policy, le regole, gli accordi o le litigate dicono diversamente... quindi mi sono chiesto, pensando al deferred loading di linq, ma perchè non introdurre questo concetto in una collection custom? e quindi avere la collection istanziata, ma vuota e solo ed esclusivamente al primo tentativo di lettura, ad esempio un GetEnumerator(), caricare effettivamente i dati; se poi siamo veramente smart potremmo implementare delle logiche per ad esempio ritornare il solo "Count" all'atto della richiesta.

A questo punto la domanda sicuramente è: ma perchè ti vuoi fare del male da solo e non usi un ORM? me lo sono chiesto anche io... e mi sono risposto:

  1. Il cliente non ne vuole sapere. Si lo so non è una scusa valida ;-);
  2. Il team in questo momento, compreso il sottoscritto, ha miseri skill su NH e il lavoro è già abbastanza complesso di suo senza introdurre altre problematiche;
  3. Abbiamo requisiti che la "mia fonte" dice non essere esaudibili con NH;
  4. varie ed eventuali...;

.m

Technorati Tags: