homelinksBlijf op de hoogte van de recente aanpassingen op vbvoorbeelden!
Visual Basic 2010 Voorbeelden

visual basic 2010 broncode voorbeelden

Microsoft Visual Studio 2010Microsoft Developers Network - Visual BasicMicrosoft .NET Framework

35.6. Lazy Load en Proxy Pattern

Print Email Deel op Facebook Deel op Twitter

Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.

Wanneer men een object wil inladen, en dit object referenties van andere objecten bevatten, die op hun beurt weer naar andere objecten verwijzen, kan dit ervoor zorgen dat een volledige objectgraph wordt ingeladen.

Toch is het zo dat men niet steeds in al deze objecten geïntresseerd is.  Het zou kunnen dat men slechts intresse heeft voor één bepaald object, en geen intresse heeft voor alle gerelateerde objecten.

Men kan in dergelijke situaties beter de in te laden data beperken tot net voldoende informatie om het object of record te identificeren.  Zo kan op basis van deze identificatiedata het object later - indien noodzakelijk - volledig worden opgehaald.
Dit wordt ook wat men het "lazy load pattern" genoemd.

Een aantal variaties hierop bestaan, een vaak gebruikt is "virtual proxy" ( zie "proxy" GoF pattern ).

Een abstract voorbeeld wordt hieronder weergegeven :
Visual Basic 2010 Broncode
Namespace Example1
    MustInherit Class Subject
        Public MustOverride Sub Request()
    End Class
    Class RealSubject : Inherits Subject
        Public Overrides Sub Request()
            Console.WriteLine("RealSubject.Request()")
        End Sub
    End Class
    Class Proxy : Inherits Subject
        Private m_RealSubject As RealSubject
        Private ReadOnly Property realSubject() As RealSubject
            Get
                If m_RealSubject Is Nothing Then m_RealSubject = New RealSubject
                realSubject = m_RealSubject
            End Get
        End Property
        Public Overrides Sub Request()
            realSubject.Request()
        End Sub
    End Class
    Class Client
        Public Shared Sub Main()
            Dim s As Subject = New Proxy
            s.Request()
            '
            Console.ReadLine()
        End Sub
    End Class
End Namespace
Console Application Output
RealSubject.Request()
Het echte "subject" object ( object van type RealSubject wordt hier pas gecreëerd op het moment dat het echt noodzakelijk is, namelijk het moment waarop deze een Request moet afhandelen.

In de context van data objects zal de proxy reeds de primary-key waarde kennen van het gerelateerde record uit de databasetabel, zodoende bij het inladen van het echte object van deze primary key gebruik te kunnen maken om het juiste record te kunnen inladen.

Soms kan het intressant zijn, meer dan enkel dergelijke primary key te stockeren, en bijvoorbeeld ook nog een beperkte hoeveelheid andere data die waarschijnlijk ook nodig zal zijn.
In dergelijk geval kan men een "light object" creëren, wat ervoor zorgt dat het effectief inladen zo lang mogelijk wordt uitgesteld.

Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.