Rolf B: Perl & LWP::UserAgent & Cookie setzen

Beitrag lesen

Ich weiß, der Thread driftet ab. Ich mag aber nicht stehen lassen, dass lazy initialization die Weiterentwicklung von DI sei. Das erscheint mir als ein Irrtum.

# file param.pm

require xCGI;

*param = sub{
  my $self = shift;
  $self->{CGI} = xCGI->new() unless defined $self->{CGI};
  return $self->{CGI}->param(@_);
};

Ich kann kein Perl und will es auch nicht können, daher ist das für mich zu 75% kryptischer Zeichensalat.

Aber soviel scheint mir klar: Das ist ein Script, das eine Instanz einer xCGI Klasse holt und in einem CGI Property ablegt, sofern das Property nicht schon gefüllt ist. Und dann delegiert es den Aufruf an die param Methode dieses Objekts.

Ja, das ist lazy delegation. Und wer xCGI mocken will, muss vor dem ersten Aufruf an $self->{CGI} etwas zuweisen. Und da raucht es doch schon:

  • dieser Zuweiser muss WISSEN, dass da lazy delegation stattfindet.
  • dieser Zuweiser muss WISSEN, welches Property da zu patchen ist
  • das Property ist nicht geschützt

Ich kann das nicht als etwas besseres als Dependency Injection ansehen. Das ist keine echte Inversion Of Control. Hier ist auch kein Tooling möglich (sprich: ein automatischer DI Container), statt dessen habe ich das alles als Boilerplate im Code drinstehen.

Bei DI habe ich eine saubere Konstruktorleiste, in der ich typisiert die Interfaces anfordern kann, deren Implementation das Objekt braucht. Ein DI-Container kann mit Reflection-Mechanismus automatisch bestimmen, welche Interface-Implementierungen ein Objekt benötigt, so dass mein Wunsch an den DI-Container, dass ich doch bitte eine Implementierung des IFoo Interface bräuchte, konfigurativ auf die Klasse FooImpl gemappt werden kann; diese hat einen Konstruktor, der ein IBar, IMumpf und IZing Interface braucht und die besorgt der DI Container dann auch gleich. Dass IZing während der Initialisierungsphase als singleton-Objekt im Container abgelegt wurde, muss dann auch keiner mehr wissen. Irgendwer hat ein IFoo Objekt angefordert, und schwupps ist ein ganzer Objektbaum dabei entstanden. Teils mit Bezügen auf existierende Objekte, teils mit neuen Objekten.

--
Dosen sind silbern