Frage

In C++ gibt es kein De-facto-Standardprotokollierungstool.Nach meiner Erfahrung rollen Geschäfte ihre eigenen.Dies stellt jedoch ein gewisses Problem dar, wenn versucht wird, wiederverwendbare Softwarekomponenten zu erstellen.Wenn alles in Ihrem System von der Protokollierungskomponente abhängt, wird die Software dadurch weniger wiederverwendbar und im Grunde sind alle nachgelagerten Projekte gezwungen, Ihr Protokollierungs-Framework zusammen mit den Komponenten zu verwenden, die sie wirklich benötigen.

IOC (Abhängigkeitsinjektion) hilft bei dem Problem nicht wirklich, da Ihre Komponenten von einer Protokollierungsabstraktion abhängig sein müssten.Protokollierungskomponenten selbst können Abhängigkeiten von Datei-E/A, Auslösemechanismen und andere möglicherweise unerwünschte Abhängigkeiten hinzufügen.

Beeinträchtigt das Hinzufügen einer Abhängigkeit zu Ihrem proprietären Protokollierungsframework die Wiederverwendbarkeit der Komponente?

War es hilfreich?

Lösung

Ja.In diesem Fall hilft jedoch die Abhängigkeitsinjektion.

Sie können eine abstrakte Protokollierungsbasisklasse erstellen und Implementierungen für die Protokollierungsframeworks erstellen, die Sie verwenden möchten.Ihre Komponenten sind lediglich von der abstrakten Basisklasse abhängig.Und Sie fügen die Implementierungen zusammen mit all ihren Abhängigkeiten nach Bedarf ein.

Andere Tipps

Ja, Mendelt hat recht.Genau das tun wir in unseren Produkten.Alles hängt von der abstrakten ILogger-Schnittstelle ab, aber von nichts anderem.Typischerweise ist eine ausführbare Datei oder eine High-Level-DLL diejenige, die eine tatsächlich implementierte Logger-Schnittstelle erstellt und diese einfügt.

Wenn Sie Bibliotheken erstellen möchten, die nicht neu kompiliert werden, aber eine Protokollierungsschnittstelle bereitstellen möchten, besteht möglicherweise eine gute Möglichkeit darin, dem Benutzer (der Bibliothek) die Bereitstellung eines Rückrufs zu ermöglichen.

Beim Initialisieren der Protokollierung mit Ihrer Bibliothek müssten sie den Rückruf angeben, und dann liegt es an ihnen, den Klebercode festzulegen, damit er mit allem, was sie haben, gut funktioniert.

Wenn Sie die Signatur des Rückrufs wie eine Standardfunktion aussehen lassen können, die ihnen möglicherweise immer zur Verfügung steht, erhalten sie eine einfache Standardoption, wenn sie tatsächlich keinen Logger haben.

Darüber hinaus hat der Aufrufer möglicherweise mehrere Instanzen von Komponenten aus der Bibliothek erstellt und möchte bei Ressourcenkonflikten oder Threading-Problemen für jede einzelne einen anderen Logger-Rückruf bereitstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top