[Munich-pm] Elche einfrieren - oder: Alle Wege führen nach ORM

Harald Jörg haj_58 at web.de
Di Aug 1 16:47:36 PDT 2017


Steffen Winkler schreibt:

>> 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.
> Das ist nicht wahr. Du kannst auch erst die Schemas mit der Hand
> schreiben und dann zu einer Datenbank deployen.

Ok, ich formuliere das genauer: Man muss erst ein Schema haben.
Entweder aus einer vorhandenen Datenbank oder von Hand erzeugt.  Genau
den Extra-Zirkus will ich vermeiden: Ich habe eine Klasse, die ganz ohne
Datenbank-Hintergedanken entstanden ist und will Objekte dieser Klasse
in eine Datenbank packen, ohne die Klassen-Attribute in "Schema-Sprache"
nochmal abzutippen.

Das soll dann in etwa so aussehen:

  package New::Class;
  use Moose;
  extends 'Old::Class';
  with 'My::MooseX::ORM';

  # ...und dann später...
  my $object = New::Class->new(%params);
  my $id = $object->store;

  # am nächsten Tag:
  my $object = New::Class->load_object($id);
  my $objects_ref = New::Class->load; # lädt die ganze Tabelle
  
Und das war's dann auch schon.  My::MooseX::ORM erzeugt und nutzt die
Tabellen hinter den Kulissen.  Der Begriff "Schema" kommt gar nicht vor
und die einzelnen Tabellen sind nicht als Klassen "greifbar".  Es ergibt
sich in der Praxis ein Unterschied zu DBIx::Class und Verwandschaft,
weil es nicht zu jeder Tabelle eine Klasse gibt. Klassenlose Tabellen
entstehen für diejenigen Attribute, die "ungetaufte Referenzen" sind:

  package Old::Class;
  use Moose;

  has 'titles' => (isa => 'HashRef[Str]');

Mit DBIx::Class würde man im Schema eine "titles"-Tabelle anlegen und
sie mit der Old::Class-Tabelle verknüpfen, damit daraus beim Deployment
die richtigen Tabellen entstehen.  Das ist Denkarbeit und
Schreibarbeit. Die entsprechenden Tabellen baut My::MooseX::ORM auch,
aber eben direkt aus der Klassendefinition!

> [...]
> Viele haben schon eine Datenbank, deshalb ist es dann so, dass man
> daraus die Schemas erzeugt. Aber man kann auch von Null an beginnen.

Richtig. Man merkt man durchgängig an der Dokumentation und den Tools,
dass "die Datenbank ist schon da" der häufigere Fall ist.  Ich kann den
Perlmonks-Artikel http://www.perlmonks.org/?node_id=1174498 mit seiner
Kritik and er Dokumentation des Deployment nachvollziehen!
-- 
Cheers,
haj


Mehr Informationen über die Mailingliste Munich-pm