Einführung
Ich implementiere eine abstrakte Java-Klasse eines Verarbeitungsframeworks *. Durch die Implementierung der Funktion execute
kann ich geschäftslogische Funktionen hinzufügen. Ich möchte die Protokollierung zu Beginn und am Ende jeder Implementierung jeder meiner Ausführungsfunktionen hinzufügen. Auch zwischen einigen Protokollierungen, wenn bestimmte Dinge erledigt werden. Ich möchte dies jedoch einheitlich gestalten. Mein Gedanke war, die Framework-Klasse an eine eigene neue Klasse zu erben, die die Protokollierung implementiert und einige neue executeWithLogging
Funktionen bereitstellt , die die Protokollierung um die spezifischen Teile wickeln. Ich bin mir nicht sicher, ob das die beste Idee ist und ob ich ein Designmuster verwenden kann, das das ganze Unternehmen elegant macht. Wie würde ich mit der ganzen Sache weitermachen?
Herausforderungen (bitte beachten Sie diese!)
- Eine Herausforderung in meinem Fall ist, dass die ursprüngliche Klasse nur eine
execute
Funktion hat, ich jedoch mehrere Teile protokollieren müsste. - Die zweite Sache ist: Unter Verwendung eines Decorator - Muster (war meine erste Idee auch) nicht ganz funktioniert, wenn ich auch benutze
execute
, weil diesuper.execute()
-function in der ersten Zeile meines neuen genannt werden müsstenexecute()
, ist es nicht ? - Es wären mindestens 4 Klassen beteiligt:
BaseFunction
vom Rahmen,LoggingFunction extends BaseFunction
von mir,MyBusinessFunction extends LoggingFunction
von mir,MyBusinessClass
der instanziiertMyBusinessFunction
. - Ich muss mich nicht nur am Anfang und am Ende von
execute
, sondern auch in der Mitte anmelden. - Die "Protokollierung" ist nicht nur eine einfache Java-Protokollierung, sondern eine Protokollierung in einer Datenbank. Dies ändert nichts an den Prinzipien, zeigt jedoch, dass die Protokollierung mehr als nur eine Codezeile sein kann.
Vielleicht wäre ein Beispiel, wie ich das Ganze machen würde, schön, um mich zum Laufen zu bringen.
| * Eine Storm Trident-Funktion, ähnlich einem Storm-Bolzen, aber dies ist nicht besonders wichtig.
execute
in BaseFunction
abstrakt?
execute
ist abstrakt in BaseFunction
.