How I like implementing lazy load with a bit of polymorphism ...

[Italian Version]

How I see/I like to see the application layers division? Every layer can speak only with the layer directly under of itself. Every layer has the knowledge of application models (business entities) and of course - for technical problems of circular reference -business entities don't know nobody.

How implement a lazy load? Someone resolve the problem using a events system. The business entities notify the need to load data on demand. Interesting solution but I don't like that the entities know what needs to lazy load. The data load mode is - in my opinion - a DAL question. The DAL know the right way to load data. My conclusion is: polymorphism can be a good way!

It follow a raw code about my idea. I exclude the question of abstract DAL e concrete DAL... I have exposed already  my opinion in the italian post "Archietture to plugIn, thoughts and considerations"...

[Assembly of Models (business entities)]
public class Person
{
     private Guid code= Guid.Empty;
     public virtual Guid Code
     {
        get{return code;}
        set{code= value};
     }
     private string name = string.Empty;
     public virtual string Name
     {
        get{return name;}
        set{name = value};
     }
    
     private AddressCollection addresses = new AddressCollection ();
     public virtual AddressCollection Addresses
     {
        get{return addresses ;}
        set{addresses = value};
     }
}
[Assembly of a concrete DAL]
class PersonDataProvider: IPersonDataProvider
{
     
     public Person RetrievePersonByCode(Guid code)
     {
         //TODO: Prepare the command to retrieve person by code.    
         
         IDataReader r = cmd.OpenReader();
         if(r.Read())
         {
           Person person = new InnerPerson();
           person.Code = (Guid)r["Code"];
           person.Name = (String)r["Name"];
           person.Addresses = null;
           return person;
         }else{
           return new UnknownPerson();
         }
     }
     
     class InnerPerson: Person
     {
         public override AddressCollection Addresses
         {
            get
            {
              if(base.Addresses == null)
              {
                //TODO: prepare command to retrieve addresses of this person ...
                //TODO: create and fill addresses collection ...
              }
              retturn base.Addresses;
            }
            set{base.Addresses = value;}
         }
     }
}

"You state that you want a function to have the flexibility of late-binding properties using the keyword virtual. You don’t need to understand the mechanics of virtual to use it, but without it you can’t do object-oriented programming in C++. In C++, you must remember to add the virtual keyword because, by default, member functions are not dynamically bound. Virtual functions allow you to express the differences in behavior of classes in the same family. Those differences are what cause polymorphic behavior." (Bruce Eckel, Thinking in C++)

Come mi piace implementare il Lazy Load con un pizzico di polimorfismo...

Ogni layer può parlare solo con quello direttamente sotto di lui, tutti i layer conoscono il modello e ovviamente le entità di business non conoscono nessuno ... La modalità di caricamento dei dati in fondo è - a mio avviso - una questione unicamente del DAL che sa meglio di chiunque altro cosa è conveniente relativamente alla base dati da lui gestita. Come implementare un lazy load? Leggete il post per vedere come la penso!

[My Indigo Steps] I primi passi e link utili ...

E' un pò che si parla di Indigo... oggi conosciuto come "Windows Communication Foundation". Ho sempre ascoltato con interesse quando si parlava dei concetti di questo nuovo prodotto (?) ma non l'avevo mai davvero toccato con mano... poi è cambiato l'anno (a tal proposito faccio gli auguri a tutti) e ho deciso che era da farsi... i tempi - come si dice - sono maturi! :-D Primo problema... ma dove si scarica!? (lo ammetto a volte sono proprio una bestia :-p)

M.rkino - alla ... : ola korrado... sai mika dove è possibile scaricare WFC?
Corrado [corrad ... : che è WFC?
M.rkino - alla ... : indigo...
Corrado [corrad ... : WCF
M.rkino - alla ... : windows comunication fundation
M.rkino - alla ... : ah si giusto...
Corrado [corrad ... : è in WinFX
Corrado [corrad ... : WinFx dec CTP
M.rkino - alla ... : ok... MSDN non lo ha ankora mandato... mi konfermi?
Corrado [corrad ... : http://msdn.microsoft.com/windowsvista/getthebeta/default.aspx
M.rkino - alla ... : grazie! :D
Corrado [corrad ... : prego!
M.rkino - alla ... : basta poko ke ce vò! :P
Corrado [corrad ... : ;)

Articoli utili in rete?

"Learn The ABCs Of Programming Windows Communication Foundation"
http://msdn.microsoft.com/msdnmag/issues/06/02/WindowsCommunicationFoundation/

"Introduction to Building Windows Communication Foundation Services"
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnlong/html/introtowcf.asp

"Service Contracts in Indigo"
http://pluralsight.com/blogs/dbox/archive/2005/02/12/5819.aspx

"Design Service Contracts with WCF"
http://www.theserverside.net/articles/showarticle.tss?id=DesignServiceContracts

La categoria "Indigo" sul blog di Clemens Vasters
http://staff.newtelligence.net/clemensv/CategoryView.aspx?category=Technology|Indigo#ab2d3cfa1-f3c3-4aed-8ec7-503fe5c21f51

La categoria "Windows Communication Foundation" di Pierre
http://blogs.ugidotnet.org/pierregreborio/category/970.aspx

«gennaio»
domlunmarmergiovensab
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234