Font
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]12588[/thread]

dbix::class anfänger



<< >> 5 entries, 1 page
guest Gast
 2008-10-06 11:41
#115195 #115195
Hallo allerseits,

im Rahmen eines neuen Projektes bin ich das erste mal auf ORM gestoßen und habe mich ein wenig in die Doku von DBIx::Class eingelesen. Leider sind die Beispiele nicht sehr tief gehend und ich weiß nicht genau, wie man ein "RealWorld"-DBIx::Class-Projekt angeht. Konkrete Frage: Benutzt man die einzelnen Schema-Klassen lediglich als Datenbankabstraktionsebene oder leitet man seine eigenen Klassen irgendwie davon ab?

Gruß + Dank,
H1
renee
 2008-10-06 11:45
#115197 #115197
User since
2003-08-04
14367 articles
ModeratorIn
[Homepage] [default_avatar]
Vielleicht hilft Dir das hier etwas weiter: http://renee-baecker.de/talks/DBIx_Class.pdf
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
guest Gast
 2008-10-06 12:16
#115198 #115198
Ok, vielleicht habe ich nicht aufmerksam genug gelesen, aber meine Frage ist damit nicht wirklich beantwortet. Wenn der Link eine Antwort auf meine Frage beinhaltet, dann, dass man die DB-Schemas benutzt, wie man früher DBI benutzt hätte, nur halt abstrahiert. Dass aber die einzelnen Schemas eher nicht dazu gedacht sind, vererbt und mit Funktionalität angereichert zu werden?

Oder anders gefragt: Wenn einer deiner Spieler, die in der Datenbank stehen, Methoden bekommen soll ( z. B. eine Fußballsimulation soll durchgeführt werden und der Spieler bewegt sich über den Platz mit meinetwegen run() oder so und das soll nicht in die DB), würdest Du diese Methoden irgendwie in die Schema-Klasse reinschreiben, eine neue Spielerklasse machen, die von My::DB::Spieler erbt und die Funktionalität ergänzt oder eine neue Spielerklasse, die eine Membervariable vom Typ My::DB?


Grüße, H1
renee
 2008-10-06 12:31
#115199 #115199
User since
2003-08-04
14367 articles
ModeratorIn
[Homepage] [default_avatar]
Ich würde das ungefähr so lösen:

Die Schemas sind nur für die Daten in der Datenbank da, nicht für das "Verhalten" eines Spielers.

Eine Klasse Spieler, der den Spieler an sich realisiert. Diese Klasse hat die Methoden "run", "kick",...

Wenn Daten wie "Anzahl Tore", "Name", "Verein" in der DB sind, dann werden die Attribute über die Schema-Klasse gesetzt.


Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package YourApp::Spieler;

use strict;
use warnings;

use My::DB;

my $schema = My::DB->connect( ... );

sub new{
  my ($class,$name) = @_;

  my $self = bless {}, $class;

  _init();

  $self;
}

sub run {
    print "der Spieler rennt";
}

sub kick {
    print "der Spieler passt zu einem Mitspieler"; 

    if( $is_goal ){
        my $info = $self->_info;
        $info->update( Anzahl_Tore => $info->Anzahl_Tore + 1 );
    }
}

sub _info {
    my ($self) = @_;

    unless( $self->{info} ){
        my $info = $schema->resultset( 'Spieler' )->search( Name => $name );
        $self->{info} = $info;
    }

    $self->{info}
}

1;


Code (perl): (dl )
1
2
3
package My::DB::Spieler;

# der ganze DBIx::Class-Kram


DB und Controller sollten getrennt sein...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
guest Gast
 2008-10-06 12:35
#115200 #115200
Yepp, mit der Antwort kann ich was anfangen. Danke schön!
<< >> 5 entries, 1 page



View all threads created 2008-10-06 11:41.