Schrift
[thread]10983[/thread]

bless-Frage (Seite 2)

Tags: Ähnliche Threads

Leser: 4


<< |< 1 2 >| >> 14 Einträge, 2 Seiten
Struppi
 2007-12-10 12:55
#103682 #103682
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Ich bin mir nicht sicher, aber mein Gefühl sagt, dass entweder Friender::Search::Search von Friender::EasyDB erben sollte (wie topeg gemacht hat) oder falls Friender::Search::Search eine Erweiterung für Friender::EasyDB sein soll, dann würde ich alle DB Zugriffe (also prepare, execute) in EasyDB halten und nur das holen der Daten in die Klasse Search packen.

Läßt sich aber nicht so pauschal sagen ohne zu Wissen was du genau vor hast.

Der Übersichthalber würde ich auch die Parameter anders übergeben:
Code (perl): (dl )
1
2
3
sub search {
         my ($self, $st, @bind) = @_;
         my $dbh = $self->{_DATA_}->{DBH};

das soll angeblich auch schneller sein.
Froschpopo
 2007-12-10 13:17
#103683 #103683
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
topeq machts doch genauso wie ich:
MyModule stellt im Grunde nur die Datenbankverbindung her und verwaltet so eine Art Main-$self der universal-Informationen wie das DBI-Handle enthält.
Danach erstellt es ein Objekt an das es auch alles weitere abgibt.
So war die Idee.

Danke übrigens für den Parameter-Tipp, find dein Beispiel auch besser als in meinem Code.
topeg
 2007-12-10 23:12
#103718 #103718
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Ich hielte es besser wenn du die DB-Zugriffe soweit wie möglich Kapseln würdest.
Das macht spätere Änderungen leichter, da alle DB-Zugriffe zentral in einer Klasse zu finden sind. Z.B. Ein Wechsel des DB Backendes würde nur eine Klasse betreffen. Erweiterungen werden einfacher und die Übersicht bleibt gewahrt.
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package Friender::EasyDB;

use strict;
use DBI;
#use Friender::Search::Search;

sub new {
        my $class = shift;
        my $self = {};
        bless($self, $class);
        $self->init(@_);
        return $self;
}

sub init {
        my $self = shift;
        my $dbh = DBI->connect_cached(@_,
                {
                        AutoCommit => 0,
                        RaiseError => 1
                }
        )
                or die $DBI::errstr;
        $self->{_DATA_}->{DBH} = $dbh;
}

sub search {
        my $self = shift;
        my ($st, @bind) = @_;
        return Friender::Search::Search->new($self, $st, @bind);
}

sub quick {
        my $self = shift;
        my $dbh = $self->{_DATA_}->{DBH};
        my ($st, @bind) = @_;
        return $dbh->selectrow_array($st, undef, @bind);
}

sub do {
        my $self = shift;
        my $dbh = $self->{_DATA_}->{DBH};
        my ($st, @bind) = @_;
        $dbh->do($st, undef, @bind);
}

sub disconnect {
        my $self = shift;
        my $dbh = $self->{_DATA_}->{DBH};
        $dbh->disconnect;
}

sub prepare {
       my $self = shift;
       my ($st, @bind) = @_;
       my $dbh = $self->{_DATA_}->{DBH};
       my $sth = $dbh->prepare($st);
       $sth->execute(@bind)
             or die $DBI::errstr;
       return $sth;
}

sub fetch
{
       my $self=shift;
       my $sth=shift;
       return $sth->fetchrow_hashref;
}

1;
#########################################################################
package Friender::Search::Search;

use strict;
use SQL::Abstract;

sub new {
        my $class = shift;
        my $db = shift;
        my $self = {};
        $self->{_DB_}=$db;
        $self->{_DATA_}->{RESULTS}=$db->fetch_prepare(@_);
        bless($self, $class);
        return $self;
}

sub get {
        my $self = shift;
        my $sth = $self->{_DATA_}->{RESULTS};
        return $self->{_DB_}->fetch($sth);
}

1;
Froschpopo
 2007-12-11 11:24
#103727 #103727
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Hm, also meine ursprüngliche Idee war ja, dass ich Friender::Search::Search nur dazu verwende, um mir ein Objekt zurückgeben zu lassen, welches ich dann in $self festhalte.

Also quasi so:
Code (perl): (dl )
1
2
3
4
sub search {
         my ($self, $st, @bind) = @_;
         $self->{_DATA_}->{_OBJECTS_} = Friender::Search::Search->new($self, $st, @bind);
}

Aber auf die Weise würde ein neues Objekt das alte jedesmal überschreiben.
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2007-12-09 13:43.