Thread Schönes Perl - OOP, getter, setter (10 answers)
Opened by styx-cc at 2014-04-04 18:11

moritz
 2014-04-05 13:40
#174636 #174636
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
2014-04-04T16:11:09 styx-cc
Hier wuerde ich $self->{'markets'} in einem Setter setzen
der anders heißt als die Eigenschaft, das gefällt mir nicht.


Und das ist dein Problem. Wenn du immer nur Attribute in gleichnamigen Settern setzt, machst du keine Kapselung, und auch kein richtiges OO.

Attribute sind Implementierungsdetails, und gehen den Nutzer nichts an. Der Nutzer kommuniziert nur mit Methoden mit der Klasse. Wenn du dich darauf beschränkst, dass es ein 1:1-Mapping zwischen Methoden und Attributen gibt, geht dir 90% der Mächtigkeit von OO verloren.

Ich kenne jetzt den Context deines Codeschnippsels nicht, aber als User würde ich erwarten, dass es eine Methode gibt, die mir die Daten liefert, die ich haben möchte.

Dass diese Methode intern eventuell ein oder mehrere Attribute benutzt, um an die Information zu kommen, ist mir egal.

Es könnte also vielleicht so aussehen:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sub markets {
   my $self = shift;
   $self->_fetch_markets();
   $self->_parse_markets();
   return $self->{markets};
}

sub _fetch_markets {
   my $self = shift;
   return if $self->{markets_raw};
   # code hier, um $self->{markets_raw} zu befüllen
   ...
}

sub _parse_markets {
    my $self = shift;
    return if $self->{markets};
    $self->{markets} = decode_json $self->{markets_raw};
}

View full thread Schönes Perl - OOP, getter, setter