Thread Wie Log-Verarbeitung ohne Abbruch bewerkstelligen (12 answers)
Opened by YAPD at 2019-05-31 19:09

haj
 2019-06-03 12:35
#190081 #190081
User since
2015-01-07
527 Artikel
BenutzerIn

user image
Hi YAPD,
2019-06-02T17:02:08 YAPD
Was meinst du denn mit "Rustikalem Design" :)
Schlecht, oder nur veraltet ?
Na ja, das sieht stellenweise so aus wie "Ärmel hochgekrempelt und drauflosprogrammiert". Immer ein bißchen abseits des Üblichen, was Groß/Kleinschreibung, Leerzeichen und -Zeilen angeht. Das ist persönlicher Stil, nicht unmoralisch, aber bei Code, der länger lebt, zahlt man irgendwann den Preis dafür. Ich bringe mal ein paar Beispiele aus Deinem Code:

2019-06-02T17:02:08 YAPD
Ich habe jetzt nur noch den Objekt - Manager :
Eine Baumarkt-Reklame sagt dazu: "Respekt, wer's selber macht". Der Objektmanager macht nicht viel. Wenn man vermeiden will, für Dutzende von Klassen beinuhe identische new-Methoden zu schreiben, dann wäre das zeitgemäße Verfahren so etwas wie CPAN:Moose oder CPAN:Moo.

Ein paar Zeilen aus dessen Code fallen sofort ins Auge:
2019-06-02T17:02:08 YAPD
Code: (dl )
1
2
3
4
	for my $Schluessel ( sort keys %Parameter ) 
{
$Self -> { Parameter } -> { $Schluessel } = $Parameter{ $Schluessel };
}
Das würde ich ja so schreiben:
Code (perl): (dl )
$Self -> { Parameter } = { %Parameter }
Sortieren der Schlüssel ist absolut überflüssig, und auch die Schleife ist eine Performance-Bremse. Auf die Performance wäre ich gar nicht eingegangen, wäre da nicht...

2019-06-02T17:02:08 YAPD
Code (perl): (dl )
1
2
    # No param unpacking for increased performance
    if ( $_[ 1 ] && $_[ 0 ] -> { Objects } -> { $_[ 1 ] } )
Das gab's mal als Tipp. In den Achzigern des vorigen Jahrhunderts. Seither sind die Computer ein bisschen flotter geworden und es hat sich die Einsicht durchgesetzt, dass man mehr an Lesbarkeit verliert als an Performance gewinnt.
Ich bezweifle, dass Du den Performancegewinn mit einem Benchmark Deines Programms nachweisen kannst.

2019-06-02T17:02:08 YAPD
Das && verweist doch darauf, dass in dem Paket "test" nochmal den Objekt - Manager aufrufe,
was ich ja mit dem Get Befehl mache. Ist das Paket dann falsch, müsste dann nicht die Meldung :
"Fehler bei der Initialisierung des Unter - Moduls $Package im Modul $CurrentObject"
erscheinen ?

Was mir da aufgefallen ist: _ObjectBuild gibt gar nichts (genauer: einen Leerstring, wenn das Laden des Moduls erfolgreich war) zurück, und das wird dann von Get weitergereicht. Get liefert also nicht zurück, was da geladen wurde.

Ich habe die von Dir gesuchte Fehlermeldung erzeugt, indem ich die Methode _ObjectBuild wie folgt verändert habe:

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
sub _ObjectBuild {

    my ( $Self, %Parameter ) = @_;

    my $Package  = $Parameter{ Package };

    my $Datei_Bezeichnung = $Package;

    $Datei_Bezeichnung =~ s{::}{/}g;
    $Datei_Bezeichnung .= '.pm';

    eval { require $Datei_Bezeichnung; };

    if ( $@ )
        {
            if ( $CurrentObject && $CurrentObject ne $Package )
                {
                    $Self -> _DieWithError( Error => "Fehler bei der Initialisierung des Unter - Moduls $Package im Modul $CurrentObject" );
                } else {
                    $Self -> _DieWithError( Error => "Fehler bei der Initialisierung des Moduls $Package" );
                }
        }
    else {
        return $Package->new;
    }
}

Das ergibt beim Ablauf:
Fehler bei der Initialisierung des Unter - Moduls Kernel::Modules::FalschesModul im Modul Kernel::Modules::test

Voilà!

View full thread Wie Log-Verarbeitung ohne Abbruch bewerkstelligen