AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[ORM] Lazy Loading - Wie implementieren?

Ein Thema von mquadrat · begonnen am 23. Sep 2011 · letzter Beitrag vom 26. Sep 2011
 
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#1

[ORM] Lazy Loading - Wie implementieren?

  Alt 23. Sep 2011, 11:56
Hallo zusammen,

Ich hab mal wieder was aus der Ecke der Konzepte. Wie würdet ihr in einem ORM in Delphi Lazy Loading implementieren? Das Mapping des OR soll komplett extern erfolgen, also z.B. über XML-Konfigurationsdateien oder Attribute. Es sollen keine Getter / Setter von Hand geschrieben werden. Direkter Zugriff auf Relationen soll über Properties möglich sein (also z.B. Rechnung.Kunde.Adresse, wobei Adresse als lazy loading in Kunde gekennzeichnet wäre).

Generell gibt es für Lazy Loading ja vier Möglichkeiten:

- Lazy Initialization: Die Property wird null-initialisiert. Beim ersten Zugriff wird das passende Objekt erstellt und geladen.
- Virtual Proxy: Es wird ein Objekt erstellt, dass das gleiche Interface wie die Zielklasse hat. Alle Aufrufe werden durchgeroutet.
- Virtual Holder: Statt das Objekt direkt aufzurufen wird immer die getValue() Funktion des Holders aufgerufen.
- Ghost: Das korrekte Objekt wird erstellt, aber nicht befüllt.


Lazy Initialization
Hierfür müsste entweder der Getter von Hand geschrieben werden oder "self-aware" Properties verwendet werden. Ich habe es noch nicht ausprobiert, aber ich denke dass müsste sich mit den Properties aus DSharp (oder einem ähnlichen Konzept) realisieren lassen.

Virtual Proxy
Um Code-Generierung zu vermeiden, müsste das Interface zur Runtime aufgebaut werden. Selbst wenn das geht, würde ich allerdings aufgrund der Typsicherheit von Delphi Probleme bei der weiteren Geschäftslogik erwarten oder es müsste im weiteren Verlauf immer eine Methode "getRealObject" mit dem richtigen Typ geben. Nicht wirklich komfortabel und schon fast ein Virtual Holder.

Virtual Holder
Sollte sich mit Generics durchaus machen lassen, sagt mir aber vom Konzept her so gar nicht zu.

Ghost:
Hier mat man ein ähnliches Problem wie bei der Lazy Initialization. Die Properties müssen den Zugriff realisieren und ggf. das Laden der Daten triggern. Man hat das Problem also von der aufrufenden Klasse in die aufgerufene Klasse verschoben. Auch das müsste mit den Properties von DSharp gehen, die Ihren Owner kennen.


Fazit:
Proxy und Holder haben IMHO konzeptionelle Unschönheiten, erlauben allerdings das Verwenden von "Standard-Properties". Lazy Initialization und Ghost verlangen den Einsatz von intelligenten Properties, was etwas unhandlich aber machbar ist. Ich würde also zu einem der beiden letzten tendieren.



Welche anderen Implementierungsmöglichkeiten gibt es? Was habe ich übersehen? Wie arbeiten existierende Delphi ORMs?
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz