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 http://hbm2pascal.appspot.com/ habe ich eine Online-Anwendung dafür, der Delphicode wird dynamisch aus den HBM Daten erzeugt. Wenn es für Delphi einmal gutes Templatig System geben sollte, lässt es sich das hbm2pascal Tool auch komplett in Delphi bauen. 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 französischen Kollegen eine funktionierende Delphi-Implementierung dieses Fluent- NHibernate- ORM- Ansatzes. Der "spiritus rector" hat für meinen Geschmack ein wenig zu lange für das französische Militär gearbeitet: Wenn man den Formalismus aus seiner 600-Seiten Dok. entfernt, bleiben ca. 50 Seiten Substanz, die dann aber sehr interessant sind. Nicht nur dasLazy Loading verlangt von dem Entwickler ein hohes Maß an Vertrauen (die Quelle spricht u.a. von Pest und Cholera) in das Framework und seine Leistungsfähigkeit. Die zugrunde liegende Implementierung erscheint mir jedenfalls immer sehr komplex und durch Formalismen aufgebläht, so dass mir in der täglichen Praxis der direkte Weg irgendwie "sicherer" erscheint (und ich mich trotzdem damit nicht wohler fühle). |
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 14:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz