Einzelnen Beitrag anzeigen

r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#3

AW: [ORM] Lazy Loading - Wie implementieren?

  Alt 23. Sep 2011, 16:12
Das ist ein sehr interessantes Problem. Hab ich mir noch gar keine Gedanken dazu gemacht.

Welche anderen Implementierungsmöglichkeiten gibt es?
Weitere sind mir nicht bekannt.

Zitat:
Wie arbeiten existierende Delphi ORMs?
Kann ich dir leider nicht sagen. Ist aber nachguckbar.

Lazy Initialization klingt für mich am pragmatischsten, und ich sehe auch nichts, was wirklich dagegen spräche. Die anderen Lösungen wären imo mit einem noch größeren Aufwand verbunden. Ein kurzes if not Assigned(Field) then Field := ... im Getter ist nun wirklich nicht die Welt...
Es geht darum, dass Persistenz im Idealfall orthogonal zur Geschäftslogik sein sollte. Klar ist es nicht viel "Arbeit", aber unsauber. Wenn man den Mechanismus ändern will, kriegt man Probleme, der zusätzliche Code ist ne zusätzliche Fehlerquelle (lustig, wenn man sowas mal vergisst) und es macht den Code unübersichtlicher. Das ist jetzt nichts, was jetzt katastrophale Auswirkungen hätte. Es ist nur unschön und kann zu vermeidbaren Problemen führen. Und genau deshalb halte ich es für sinnvoll, hier zwei, drei Gedanken mehr drauf zu verschwenden.


Zwei Gedanken deshalb von mir:
- LazyInitialization könnte man u.U. mit Annotationen/Attributen reparieren. Also den Lazy-Initialization-Code zur Laufzeit einfügen. Hab ich aber nich nie gemacht, kann dazu also leider nicht viel sagen.
- Den Proxy fände ich eigentlich auch am schönsten, weil nun wirklich orthogonal. Ob man zu Laufzeit den Proxy erzeugen kann, weiß ich nicht. In Java geht das und so hege ich die Hoffnung, dass es in Delphi auch ne Möglichkeit gibt. Probleme mit der Typisierung sehe ich da nicht. Es könnte nur sein, dass das zur Laufzeit nicht geht und man auf Code-Generatoren ausweichen muss.

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat