[Munich-pm] Elche einfrieren - oder: Alle Wege führen nach ORM
Harald Jörg
haj_58 at web.de
Mo Jul 31 15:56:49 PDT 2017
Hallo Mongers,
Heute habe ich ein paar Fragen (ein Sommerrätsel) und ein Angebot.
in den letzten Wochen habe ich an etwas rumgebastelt, bei dem ich mir
nicht vorstellen kann, dass ich der erste bin. Auf CPAN gibt's entfernte
Verwandschaft, aber nicht das, was ich möchte...
Es fing damit an, einen Sack von Excel-Dateien zu parsen... dann kam
eine XML-Datei dazu, dann ein bisschen Workflow. Am Anfang habe ich
immer alles "von Null" aus den Dateien aufgebaut, nur irgendwann war's
mir zu dumm, alle Abfragen einfach auszuprogrammieren und ich wollte das
in eine Datenbank packen, damit die Kollegen direkt per SQL drauf
losgehen können. Also: Ein Object-Relational-Mapper muss her, der aus
meinen Objekten Datenbank-Tabellen macht.
Hm. "Da nimmt man DBIx::Class", heißt es. Nur ist der falschrum: Da
muss man erst das Datenbankschema haben, und er erzeugt die Objekte
draus. Also eigentlich ein ROM und kein ORM. Ich habe auch kurz über
Tangram, Fey und Alzabo geblättert, aber die scheinen alle genauso
gestrickt zu sein: Erst baut man das Schema nach deren Regeln. Eine
Ausnahme ist KiokuDB, aber der packt die Objekte in JSON-Strings - wenn
ich echte Datenbankabfragen auf einzelne Attribute machen will, muss ich
wieder die Spalten extra abspeichern.
Ich habe Moose-Klassen, bei denen jedes Attribut Auskunft geben
kann, wie man's abspeichert. Und ich will jedes Attribut in Queries
verwenden können, was die KiokuDB praktisch ausschließt.
Ich bin grade dabei, das selber zu machen: Per Introspection die
Moose-Attribute abfragen, daraus die Datenbank-Spalten erzeugen. Wie
bei den anderen ORMs kann es sein, dass ein Objekt mehrere Tabellen
erzeugt, beim ersten "echten" Testobjekt sind es deren 19. Das macht
Spaß, wird aber umso länglicher, je mehr Möglichkeiten von Moose man
unterstützen will.
Nun die Fragen:
* Kennt einer von Euch ein vergleichbares Projekt auf CPAN, das ich
übersehen habe - oder habe ich eins der genannten einfach falsch
verstanden?
* Anstelle direkter SQL-Tabellen könnte ich auch ein
DBIx::Class-Schema erzeugen und daraus dann die Tabellen
generieren. Das ist mehr Aufwand, aber die DBIx::Class-Fans
könnten dann direkt mit dem Schema arbeiten und müssten kein SQL
verwenden. Ich habe überhaupt kein Gefühl dafür, ob DBIx::Class
einfach nur eine von vielen Möglichkeiten ist oder der
"Perl-Standard". Wie seht Ihr das?
Das Angebot:
* Wir hatten schon lange keine technische Session mehr. Wenn
Interesse besteht, dann kann ich mal vorstellen, was ich da gebaut
habe, was alles geht und wo die Grenzen sind.
--
Cheers,
haj
Mehr Informationen über die Mailingliste Munich-pm