Thread Klassen-Attribut auch in der Base-Klassen nutzen
(5 answers)
Opened by Hagen at 2021-04-14 23:15 2021-04-15T07:49:36 haj Das hatte ich befürchtet bzw. macht auch Sinn. Ich hatte u.a. gehofft, dass man Attribute ähnlich wie Methoden überschreiben könnte. 2021-04-15T07:49:36 haj Ja, das habe ich in anderer Stelle gemacht bzw. auch häufiger bei anderen Sprachen gesehen. Was mich stört ist der dadurch 'unnötig' erzeugte Programmcode. Ist es nur ein Konfigurations-Wert, dann geht das noch. Sind es aber mehrere und wenn es auch mehrere Kind-Klassen gibt sind es schon viele zusätzliche Funktionen, die sich nur minimal unterscheiden. Angefangen hatte ich wie Linuxer in seinem Beispiel, alle Konfigurations-Werte dem Konstruktor als Parameter mitzugeben. Code (perl): (dl
)
my $customer = DB::Customer->new('customer'); Dann sind es aber mit der Zeit immer mehr gleiche Paremeter geworden Code (perl): (dl
)
1 2 3 4 my $customer1 = DB::Helper->new('id customer 1', 'customer', 'euro', '...', '...', '...'); my $customer2 = DB::Helper->new('id customer 2', 'customer', 'euro', '...', '...', '...'); my $customer3 = DB::Helper->new('id customer 3', 'customer', 'euro', '...', '...', '...'); my $customer4 = DB::Helper->new('id customer 1', 'customer', 'euro', '...', '...', '...'); Weshalb ich dann den Helper zur Eltern-Klasse gemacht habe und in der Klasse Customer versucht habe 'irgendwie' alles zu konfigurieren. Aktuelle Lösung ist, dass ich die Werte jetzt im Konstruktor ergänze 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 #! /usr/bin/env perl use strict; use warnings; package DB::Base { sub new { my ( $class, $name, $options ) = @_; my $self = {}; bless( $self, $class ); $self->{name} = $name; $self->{options} = $options || {}; return $self; } sub option { my ( $self, $key ) = @_; die('missing key') unless ($key); die( 'missing option `' . $key . '`' ) unless ( defined $self->{options}{$key} ); return $self->{options}{$key}; } }; package DB::Customer { use base "DB::Base"; sub new { my ( $class, @args ) = @_; return $class->SUPER::new( @args, { type => 'Customer', currency => 'Euro', ... } ); } }; package main; my $customer1 = DB::Customer->new('id_customer 1'); __END__; Danke für eure Anregungen! Gruß
Hagen |