Thread Moose Delegation (7 answers)
Opened by rosti at 2014-04-16 18:55

rosti
 2014-04-16 19:56
#174821 #174821
User since
2011-03-19
3197 Artikel
BenutzerIn
[Homepage]
user image
Herzlichen Dank!!!

Und jetzt das eigentliche Problem ;)

Delegieren (die Instanz einer fremden Klasse wird zu einem Attribut der eigenen Klasse) ist, soweit ich das bisher kenne und lebe, nur möglich, wenn die Instanz der fremden Klasse (CGI->new) zeitgleich zusammen mit der Instanz meiner eigenen Klasse erstellt wird.

Nun: Die Instanz der fremden Klasse wird später erstellt. Fernab jeglicher Delegation würde sowas funktionieren:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
use CGI;
# zur Laufzeit also:
print $foo->header(CGI->new);

sub header{
  my $self      = shift;
  my $cgiobject = shift;
  return $cgiobject->header();
}


Was ich jedoch als Stilbruch empfinde, weil eine Instanz einer fremden Klasse einfach so in eine Methode meiner Klasse übergeben wird, wo dann mit der Instanz der fremden Klasse deren Methode aufgerufen wird.

In einer Factory würde ich das so machen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
use CGI;
print $foo->header;

sub header{
  my $self      = shift;
  my $cgiobject = CGI->new;
  return $cgiobject->header();
}

Also das CGI-Objekt nicht übergeben, sondern in der eigenen Methode erzeugen. Hier wäre eine Stilfrage zu bestreiten ;)

Oder die Frage zu klären: Ist eine späte Delegation möglich, evntl. mit Moose?

View full thread Moose Delegation