Entwickler-Ecke
Datenbanken - OO DB Layer
r4id3n - Mo 25.10.04 19:49
Titel: OO DB Layer
Hallo zusamen, derzeit arbeite ich an einem CMS-System und brauche einen DBLayer der es mir ermöglicht komplette Objekte in einer Datenbank zu speichern (Stickwort Persistent Object Framework). Ich suche ein Projekt ala InstantObjects, welches mitlerweile Open Source ist, allerdings jedoch nicht unter Kylix läuft... Kennt jemand von euch ein kostenloses oder open source projekt (eventuell auch eine portrierung von InstantObjects)? Bedingung allerdings, das ganze muss auch unter Kylix laufen!!
THX
r4id3n - Fr 29.10.04 14:10
Nachdem sich anscheindend noch niemand mit der Materie beschäftigt hat, verusche ich derzeit meinen eigenen Layer zu entwickeln! Hat sich schon jemand mit TPersistent auseinander gesetzt und versucht eine eigene SaveTOXX zu schreiben??
THX
r4id3n - So 14.11.04 17:40
So, das teil ist fertig! Basisklasse, von der beliebig abgeleitet werden kann ....
Die Klasse besitzt Childs einer beliebigen abgeleiteten klasse, die ebenfalls mit gespeichert werden.
Falls jemand also sowas mal braucht, der kann sich gerne bei mir melden. Derzeit wird die ZEOS Lib verwendet, alle möglichen DBs sind also denkbar!
Lemmy - Mo 15.11.04 08:56
Hi r4id3n,
mich interessiert das Thema brennend. Kannst Du mir ein paar Infos (Source) rübermailen??
Grüße
Lemmy
r4id3n - Mo 15.11.04 16:07
Derzeit basiert das teil, wie schon gesagt, auf der ZEOS Lib.
Die Basisklasse besitzt die Funktionen
- ObjectID // Eindeutige ID des Objektes
- LoadMe(WithChilds:boolean=false) // Läd objekt aus der Datenbank evtl. incl Childs
- SaveMe(WithChilds:boolean=true) // Speichert Objekt in der Datenbank
- DeleteMe(WithChilds:boolean=true) // Löscht Objekt aus der Datenbank
- Childs // Liste von Childobjekten des Typs der Basisklasse. Kann aber auch abgeleitete Klassen aufnehmen. (Baumstruktur)
Von dieser Basisklasse können jetzt einfach Klassen abgeleitet werden, die dann selber in der Datenbank eine Tabelle erstellt die alle PROPERTIES enthält.
z.b.
Quelltext
1: 2: 3: 4: 5: 6: 7:
| TMeineTestClass = class(TDBBasicObject) private FName:String; FVorname:String; published property Name:String read FName write FName; property Vorname:String read FVorname write FVorname; |
Dann kann ich z.B.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| Name1:=TMeineTestClass.create(MeineZEOSDBConnection); Name1.vorname:='hallo'; Name1.name:='test'; // Name2 wird child von Name1 Name2:=TMeineTestClass.create(Name1); Name2.vorname:='hallo2'; Name2.name:='weifnriu';
//speichert Name 1 incl. Name2 als child, name 2 kann aber auch eine andere Klasse abgeleitet von TMeineTestClass oder TDBBasicObject sein Name1.saveme(true); |
Das Laden geht dann genau so:
Quelltext
1: 2: 3: 4:
| Name1:=TMeineTestClass.create(MeineZEOSDBConnection); Name1.ObjectID:=Mussichmirvorherirgendwogemerkthaben; // Läd name 1 incl name 2! Name1.LoadMe(true); |
Leider können derzeit aber nur Stringkompatible properties (string, int, bool, ...) gespeichert werden!
Da in dem Teil verdammt viel arbeit steckt, will ich das teil nicht für kommerzielle zwecke kostenlos zur verfügung stellen! Das wird teil eines OS Projektes. Ich überlege aber auch, die Klasse als eigenes Framework zur verfügung zu stellen (unter GPL) wenn du es privat nutzen willst, dann sag bescheid, wenn das teil in ein kommerzielles produkt soll, dann müssen wir uns mal über den preis unterhalten ;-)
Lemmy - Di 16.11.04 13:03
Hi,
da ich selbst so etwas vergleichbares einsetze würde mich lediglich der Teil des Speichers interessieren, da ich die Zuweisung Object.Property <-> Tabelle.Attribut noch "manuell" vornehmen muss. Ich vermute mal, dass Du da etwas besseres hast. Allerdings bringt mir das auch wiederum nix, denn ich brauch auch was für Int64, Blobs und Currency....
Grüße
Lemmy
r4id3n - Di 16.11.04 15:43
INT64 und Currency sind Stringkopatible und müssten funktionieren! Wie das mit dem BLOB aussieht kann ich dir nicht sagen! Was speicherst du denn in dem Feld (bzw. welchen Datentyp hat die Property in deiner Klasse)??
Lemmy - Di 16.11.04 17:09
Hi,
meistens sind es Objekte von TStringList, in ein paar Fällen aber auch TImage oder sonstige Dateien. Allerdings muss ich zugeben, dass ich in diesen Fällen bisher noch keine Objekte einsetze (also bei TImage bzw. sonstigen Dateien). Wir aber vielleicht in der Zukunft mal sein (je nachdem wie viel Zeit ich für den Umbau noch aufwenden darf).
r4id3n - Di 16.11.04 18:17
Hmm .... Wenn du die Images in HEX umwandelst kannst du die als strings speichern ... Leider werden Images und co. nicht unterstützt!
Wie gesagt ... Wenn du es nicht kommerziell nutzt ... Der source ist GPL! D.h. alles, was damit oder mit teilfunktionen entwickelt wird, muss ebenfalls GPL sein!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!