Wenn ich an agile Softwareentwicklung und alle Prinzipien (SRP, OCP, ...) denke, frage ich mich, wie ich mit Protokollierung umgehen soll.
Ist die Protokollierung neben einer Implementierung eine SRP-Verletzung?
Ich würde sagen, yes
weil die Implementierung auch ohne Protokollierung laufen soll. Wie kann ich die Protokollierung besser implementieren? Ich habe einige Muster überprüft und bin zu dem Schluss gekommen, dass der beste Weg, die Prinzipien nicht auf benutzerdefinierte Weise zu verletzen, sondern jedes Muster zu verwenden, das bekanntermaßen gegen ein Prinzip verstößt, die Verwendung eines Dekorationsmusters ist.
Nehmen wir an, wir haben eine Reihe von Komponenten, die keine SRP-Verletzung aufweisen, und möchten dann die Protokollierung hinzufügen.
- Komponente A
- Komponente B verwendet A
Wir möchten die Protokollierung für A durchführen, also erstellen wir eine weitere Komponente D, die mit A dekoriert ist und eine Schnittstelle I implementiert.
- Schnittstelle I
- Komponente L (Protokollierungskomponente des Systems)
- Komponente A implementiert I
- Komponente D implementiert I, dekoriert / verwendet A, verwendet L für die Protokollierung
- Komponente B verwendet ein I
Vorteile: - Ich kann A ohne Protokollierung verwenden - Testen A bedeutet, dass ich keine Protokollierungsversuche benötige - Tests sind einfacher
Nachteil: - mehr Komponenten und mehr Tests
Ich weiß, dass dies eine weitere offene Diskussionsfrage zu sein scheint, aber ich möchte wissen, ob jemand bessere Protokollierungsstrategien als ein Dekorateur oder eine SRP-Verletzung verwendet. Was ist mit statischen Singleton-Loggern, die standardmäßig NullLogger sind, und wenn Syslog-Logging gewünscht wird, ändert man das Implementierungsobjekt zur Laufzeit?