2016-05-04 10 views
4

Bei der Erstellung von Enterprise-Bibliotheken, die für die Wiederverwendung in einem größeren Umfang konzipiert sind, finde ich mich häufig über die Umsetzung von übergreifenden Design-Bedenken einfrieren, da diese wirklich schwer richtig werden können. Heute sitze ich daran, den besten Weg zu analysieren, um Tracing und Diagnose in einer wiederverwendbaren Unternehmensbibliothek durchzuführen.Wie kann ich die Ablaufverfolgung und Diagnose auf Bibliotheksebene SOLID in .NET implementieren?

Wenn man sich die BCL von .NET ansieht, scheint es, dass Protokollierung und Diagnose ein nicht-trivialer Teil des Frameworks ist.

  • System.Diagnostics hat die Trace-Familie von Arten, für die Ausführung Verfolgung verwendet und app.config freundliche Beschaffung und Abonnement (für die Zuhörer.), Die das gesagt ist, neige ich dazu app.config im Allgemeinen zu hassen und vermeide eher das lose typisierte Geheimnis, das mit magischen Konfigurationszeichenfolgen kommt.

  • System.Diagnostics.Tracing verfügt über die EventSource-Familientypen, die für die ereignisbasierte Diagnose verwendet werden. Dies ist mehr mein Typ, aber es ist mir nicht klar, ob und wie dies in Bibliotheken verwendet werden sollte, da die Protokollierungsrichtlinie ein Anliegen der Anwendung ist, mehr als die Domänenbibliotheken.

Eine Möglichkeit, das macht Sinn für mich ist, einfach in meiner Stiftung Domäne Bibliothek einige gemeinsame Protokollierung Schnittstellen zu definieren und ermöglichen Anwendungen Implementierungen über eine Art von Umgebungskontext Muster zu injizieren, aber meine eigenen Protokollierungstypen für diese definieren scheint unnötig.

Antwort

2

Eine Möglichkeit, die für mich Sinn macht, ist einfach in meiner Foundation-Domain-Bibliothek einige gemeinsame Logging-Schnittstellen zu definieren.

Das ist richtig. Außerdem müssen Sie eine Standardprotokollimplementierung erstellen, die z. Systemdiagnose-Trace-Klasse (falls die Ablaufverfolgung von der Consumer-App dieser Bibliothek aktiviert ist).

erlauben Anwendungen Implementierungen über eine Art von Umgebungskontext Muster wird

Anstatt zu kämpfen, wie andere der Logger einfach bieten eine Möglichkeit, injizieren zu injizieren z.B. benutzerdefinierte Fabrik, um die Implementierung der Logger-Schnittstelle zu injizieren.

Die Factory wird für die Bereitstellung der Instanz in der Bibliothek verantwortlich sein. Wenn eine Implementierung bereitgestellt wird, verwenden Sie diese, andernfalls wird die Standardinstanz als Standardprotokollierung verwendet. Sie können einen Blick auf die EF7 library(logging) für die Infrastruktur des Loggers werfen.

+0

Dies spiegelt meine Gedanken ebenso. Ich mag es nicht, Fabriken zu überbeanspruchen, aber um Komponentennähte zu überqueren, sind sie oft nützlich, um die gewünschte Nutzung durchzusetzen. –

+1

Die Protokollierung sollte keine Abhängigkeit sein, daher sollte die Bibliothek funktionieren, wenn der Benutzer die Protokollimplementierung nicht bereitstellt. Jetzt können Sie überlegen, wie Sie mit dieser Situation umgehen sollen. – vendettamit