![]() |
AW: [ORM] Lazy Loading - Wie implementieren?
Mal schauen, vielleicht wird ja aus dem "In-House-Projekt" mal ein ausgewachsener ORM. Aktuell evaluiere ich ja eh erst mal, ob ich was passendes finde oder eben selber was schreiben muss. Das Lazy Loading hat mich jetzt vor allem mal konzeptionell interessiert.
|
AW: [ORM] Lazy Loading - Wie implementieren?
Zitat:
![]() So sollte also die Persistenz (das Speichern in der DB) unabhängig von der eigentlichen Programmlogik sein (das nennt man Orthogonalität). im Idealfall steht in den Klassen die gespeichert werden sollen gar kein Code, der sich ums Speichern kümmert. Das Speichern steht in einer anderen Klasse, die jedes beliebige Objekt speichern kann. Nicht immer ist Orthogonalität einfach zu erreichen, aber es hat ja auch niemand behauptet Softwareentwicklung wär immer nur einfach. Zitat:
![]() Zitat:
Zitat:
mfg Christian |
AW: [ORM] Lazy Loading - Wie implementieren?
Zitat:
In der Datenklasse steht dann kein Code, der sich direkt um die Persistenz kümmert, lediglich ein Getter, der eine Eigenschaft zurückliefert. Das würde ich noch nicht als Geschäftslogik bezeichnen. |
AW: [ORM] Lazy Loading - Wie implementieren?
Lazy Initialization widerspricht dem meiner Meinung nach auch nicht. Der Punkt ist viel mehr, dass es viel bequemer ist, wenn das der ORM übernehmen kann :-) Wenn die Anwendung nichts von der DB wissen soll, dann weiß sie auch nicht wie teuer es ist ein bestimmtes Objekt zu erzeugen. Hier kann man dann ggf. beim Mapping eingreifen, womit das Lazy Loading in das Hoheitsgebiet des ORM fällt.
|
AW: [ORM] Lazy Loading - Wie implementieren?
Proxies von Interfaces scheinen mir hier am sinnvollsten zu sein.
Mir fallen da spontan ein paar Wege ein:
btw: Ich weiß nicht wieweit tiOpf ist. In meinen alten Delphi-Tagen fand ich es immer ein wenig zu einschränkend und creepy. Aber das muss ja gar nicht mehr so sein. Damit hättest du das Thema ORM/OPF abgehakt. |
AW: [ORM] Lazy Loading - Wie implementieren?
Zitat:
Unter ![]() Haken ist allerdings, dass XML für die Definition der Tabellen / Felder / Referentiellen Integritäten verwendet wird. Doch wenn man DB-Werkzeuge wie IBExpert & Co. hat, lässt sich über deren Editor ja auch bequem arbeiten und anschliessend läßt man DDL2HBM drüber laufen. |
AW: [ORM] Lazy Loading - Wie implementieren?
Zitat:
Delphi-Quellcode:
;) Selbst wenn die Konzepte überzeugen, wird eine Implentierung leider häufig auch durch die speziellen Delphi-Gegebenheiten beschränkt.
virtual;abstract;
Soweit ich das beurteilen kann, findet sich bei unseren ![]() ![]() Nicht nur das ![]() |
AW: [ORM] Lazy Loading - Wie implementieren?
Ist ja doch noch eine muntere Diskussion geworden ;)
Ich werde bei Gelegenheit mal einige der existierenden ORMs anschauen. |
AW: [ORM] Lazy Loading - Wie implementieren?
In Delphi XE wurde der TVirtualMethodInterceptor eingeführt.
Da drüber würde sich auch sehr einfach was basteln lassen. |
AW: [ORM] Lazy Loading - Wie implementieren?
Sehr interessanter Thread.
Ich denke, man muss hier unterscheiden zwischen 1 zu 1 Relationen und 1 zu n Relationen. Lazy loading für 1 zu n Relationen sind imo einfacher zu implementieren, da man hier die Logik in die Listenklasse implementieren kann. Hierbei muss man dann auch darauf achten, ob man pro Listen Element ein SQL abfeuert (z.B. bei Linq to SQL Standard verhalten) oder ob man beim Zugriff auf die Liste diese direkt komplett befüllt (gibts afair auch eine Einstellung bei Linq to SQL). In einem DSharp Prototypen benutze ich eine von TObjectList<T> abgeleitete Klasse, um das zu realisieren. Lazy loading für 1 zu 1 Relationen zu implementieren, halte ich mit derzeitigem Stand für etwas schwieriger. Möglicherweise könnte man an dieser Stelle mit einem virtuellen Getter arbeiten, welcher über TVirtualMethodInterceptor zur Laufzeit erweitert wird. Ich muss mich mit der gesamten ORM Thematik nochmals auseinander setzen - eventuell bietet sich dort auch meine jüngste AOP Implementierung an. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:21 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