Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi [ORM] Lazy Loading - Wie implementieren? (https://www.delphipraxis.net/163286-%5Borm%5D-lazy-loading-wie-implementieren.html)

mquadrat 26. Sep 2011 10:15

AW: [ORM] Lazy Loading - Wie implementieren?
 
Ein virtueller Getter mit Interceptor würde sicher funktionieren. Das blöde dabei ist nur, dass man wenig Nutzen hat. Man muss trotzdem einen Getter implementieren, damit etwas zum intercepten da ist. In diesem Fall würde man also ca. drei Zeilen handgeschriebenen Code (manuelle Lazy Initialization) durch eine Zeile handgeschrieben Code + Attribut + Interception + Rtti + ORM Code ersetzen. Nicht wirklich schlank ;)

Kann aber auch daran liegen, dass ich bis jetzt erst einen Kaffee getrunken habe :D

Stevie 26. Sep 2011 10:21

AW: [ORM] Lazy Loading - Wie implementieren?
 
Zitat:

Zitat von mquadrat (Beitrag 1126646)
drei Zeilen handgeschriebenen Code (manuelle Lazy Initialization)

Wie soll diese manuelle lazy initialization ohne dependency denn realisiert werden?

mquadrat 26. Sep 2011 10:27

AW: [ORM] Lazy Loading - Wie implementieren?
 
Ohne Dependency auf den ORM natürlich gar nicht ;) Den müsste man injecten.

Stevie 26. Sep 2011 10:47

AW: [ORM] Lazy Loading - Wie implementieren?
 
Zitat:

Zitat von mquadrat (Beitrag 1126650)
Ohne Dependency auf den ORM natürlich gar nicht ;) Den müsste man injecten.

Genau das gilt es zu verhindern. Denn eine Abhängigkeit auf den ORM in nem PODO ist imo ein no go.

Elvis 26. Sep 2011 11:13

AW: [ORM] Lazy Loading - Wie implementieren?
 
Lazy ist auch unbedingt auf dein einelnen Entitäten nötig.
Denn wenn du einen Customer über den key liest, ihm eine weitere Addresse zuordnest und abspeicherst, müsste der Customer-Datensatz in der Tabelle nie angefasst werden. (so mach das (n)Hibernate zum Bleistift)
Das Implemtieren von Getter/Setter könnte auch durch abstrakte GetteR/Setter reduziert werden, dann müsste der Interceptor halt einen eigenen Store nutzen (e.g. ein Dictionary)
Aber vllt solltet ihr einfach Bolemb mit Liebesentzug drohen, wenn die nicht schleunigst virtuelle und vor allem abstrakte Properties erlauben, ohne explizit Setter angeben zu müssen. (Ähnlich zu Oxygene)

Das Problem, das ich bei den TVirtualInterface oder MethodInterceptor sehe ist, dass da sehr sehr viele Indirektionen im Spiel sind. Das kann schnell ganz schön lahm werden.

Mal schauen wie Embello das löst, also ob die auch weitere Felder für die Proxies zulassen, so dass man nicht auch noch durch ein Dictionary müsste. Ganz zu schweigen von tatsächlich überschrieben Methoden, nicht nur Interceptions. Wenn man für jeden Call erstmal nachkieken muss, was wirklich ausgeführt werden muss, dann tut das doch weh. :cry:

Stevie 26. Sep 2011 11:49

AW: [ORM] Lazy Loading - Wie implementieren?
 
Zitat:

Zitat von Elvis (Beitrag 1126660)
Mal schauen wie Embello das löst, also ob die auch weitere Felder für die Proxies zulassen, so dass man nicht auch noch durch ein Dictionary müsste. Ganz zu schweigen von tatsächlich überschrieben Methoden, nicht nur Interceptions. Wenn man für jeden Call erstmal nachkieken muss, was wirklich ausgeführt werden muss, dann tut das doch weh. :cry:

Wird Emballo noch aktiv weiterentwickelt? Oder ist das Repo auf google code nicht das aktuelle?

Elvis 26. Sep 2011 12:24

AW: [ORM] Lazy Loading - Wie implementieren?
 
Zitat:

Zitat von Stevie (Beitrag 1126671)
Wird Emballo noch aktiv weiterentwickelt? Oder ist das Repo auf google code nicht das aktuelle?

Der Code liegt auf Bitbucket. https://bitbucket.org/magnomp/emballo

Stevie 26. Sep 2011 12:48

AW: [ORM] Lazy Loading - Wie implementieren?
 
Mit DSharp kann man sowas machen. (virtueller Getter mit RTTI vorausgesetzt)

mquadrat 26. Sep 2011 13:29

AW: [ORM] Lazy Loading - Wie implementieren?
 
Ich schätze mal, ich werd die verschiedenen Möglichkeiten einfach mal ausprobieren müssen. Für in-depth Test hab ich allerdings aktuell wenig Zeit. Messe steht an..


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:46 Uhr.
Seite 3 von 3     123   

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