Question

En C++, il n’existe pas d’outil de journalisation standard de facto.D'après mon expérience, les magasins roulent les leurs.Cela crée cependant un petit problème lorsque l'on essaie de créer des composants logiciels réutilisables.Si tout dans votre système dépend du composant de journalisation, cela rend le logiciel moins réutilisable, obligeant essentiellement tous les projets en aval à utiliser votre cadre de journalisation avec les composants qu'ils souhaitent réellement.

IOC (injection de dépendances) ne résout pas vraiment le problème puisque vos composants devraient dépendre d'une abstraction de journalisation.Les composants de journalisation eux-mêmes peuvent ajouter des dépendances sur les E/S de fichiers, des mécanismes de déclenchement et d'autres dépendances éventuellement indésirables.

L'ajout d'une dépendance à votre infrastructure de journalisation propriétaire sacrifie-t-il la réutilisabilité du composant ?

Était-ce utile?

La solution

Oui.Mais l’injection de dépendances sera utile dans ce cas.

Vous pouvez créer une classe de base de journalisation abstraite et créer des implémentations pour les frameworks de journalisation que vous souhaitez utiliser.Vos composants dépendent simplement de la classe de base abstraite.Et vous injectez les implémentations ainsi que toutes leurs dépendances selon les besoins.

Autres conseils

Oui, Mendelt a raison.C'est exactement ce que nous faisons dans nos produits.Tout dépend de l'interface abstraite d'ILogger, mais cela ne dépend de rien d'autre.Généralement, un exécutable ou une DLL de haut niveau sera celui qui permettra de construire une interface Logger réellement implémentée et de l'injecter.

Si vous cherchez à créer des bibliothèques qui ne seront pas recompilées, mais que vous souhaitez fournir une interface de journalisation, un bon moyen consiste peut-être à permettre à l'utilisateur (de la bibliothèque) de fournir un rappel.

Lors de l'initialisation de la journalisation avec votre bibliothèque, ils devront spécifier le rappel, puis le code de colle dépendra d'eux pour le faire fonctionner correctement avec tout ce qu'ils ont.

Si vous pouvez faire en sorte que la signature du rappel ressemble à une fonction standard dont ils pourraient toujours disposer, cela leur fournit une option par défaut simple s'ils ne disposent pas réellement d'un enregistreur.

De plus, l'appelant peut avoir instancié des composants de la bibliothèque à plusieurs reprises et, en cas de conflits de ressources ou de problèmes de thread, il peut souhaiter fournir un rappel de journalisation différent pour chacun.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top