|
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 ClassEnd NamespaceDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
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.
|