Hola Leandro, el libro de Patterns of Enterprise Application Architecture de Fowler te tira 4 opciones para hacer Lazy Load: Lazy Initialization, Virtual Proxy, Value Holder y Ghosts. http://martinfowler.com/eaaCatalog/lazyLoad.html Para colecciones Virtual Proxy me parece de lejos la opción más elegante, porque el objeto del dominio ni se entera de que se está cargando la colección por lazy load.

No se si era esto lo que buscabas o no, pero si querés te paso el ejemplo del libro o alguna implementación mía.

Saludos,

Pedro




Leandro Tuttini escribió:
Hola que tal.

De seguro me meta en un lio con esta pregunta, pero queria realizarla igualmente a ver que ideas surgen.

La idea es poder implementar un lazy load casero, o sea no importa si se utiliza algun framework o no.

La idea es poder por ejemplo tener una clase Entidad, ejemplo de "Region" y poder obtener sus "Instituciones" de esa zona, pudiendo cargarse esto en el momento que se invoca.

Por supeusto este Lazy no necesariamente cargara desde un Provider a la Base de Datos, podra leer tambien desde un xml, esto igual es anecdotico, ya que lo resuelve el provider que se implemente, o mejor el factory del provider.

Lo que no llego a terminar de cerrar es como se puede lanzar a la ejecucion un atributo en una propiedad de una clase, y que este atributo cargue la lista en la variable manejada por la entidad.

Se puede lograr esto? es muy complejo?

public class RegionEntity
{

    private List<InstitucionEntity> _instituciones;

    [Lazy(InstitucionesFactory)]
    public List<InstitucionEntity> Instituciones
    {
        get{return _instituciones;}
        set{_instituciones = value;}
    }

}

Como veran en el ejemplo simple la idea seria lograr que al invocar la propiedad, primeramente se llame al atributo y cargue la lista.

Bueno cualquier ayuda ser bienvenida.
Saludos

------------------------------------------------------------------------

Compartí video en la ventana de tus mensajes y también tus fotos de Flickr.
Usá el Nuevo Yahoo! Messenger versión Beta.
Visitá http://ar.beta.messenger.yahoo.com/

Responder a