Domanda

In C++ non esiste di fatto uno strumento di registrazione standard.Nella mia esperienza, i negozi si fanno da soli.Ciò crea tuttavia qualche problema quando si tenta di creare componenti software riutilizzabili.Se tutto nel tuo sistema dipende dal componente di registrazione, ciò rende il software meno riutilizzabile, costringendo sostanzialmente tutti i progetti downstream a prendere la tua struttura di registrazione insieme ai componenti che realmente desiderano.

IOC (iniezione di dipendenza) non aiuta davvero a risolvere il problema poiché i componenti dovrebbero dipendere da un'astrazione di registrazione.Gli stessi componenti di registrazione possono aggiungere dipendenze sull'I/O dei file, meccanismi di attivazione e altre dipendenze potenzialmente indesiderate.

L'aggiunta di una dipendenza al framework di registrazione proprietario sacrifica la riusabilità del componente?

È stato utile?

Soluzione

SÌ.Ma l’iniezione di dipendenza aiuterà in questo caso.

Puoi creare una classe base di registrazione astratta e creare implementazioni per i framework di registrazione che desideri utilizzare.I tuoi componenti dipendono solo dalla classe base astratta.E inserisci le implementazioni insieme a tutte le loro dipendenze secondo necessità.

Altri suggerimenti

Sì, Mendelt ha ragione.Facciamo esattamente questo con i nostri prodotti.Tutto dipende dall'interfaccia astratta ILogger, ma non dipende da nient'altro.In genere un eseguibile o una DLL di alto livello sarà quello che costruirà un'effettiva interfaccia Logger implementata e la inserirà.

Se stai cercando di creare librerie che non verranno ricompilate, ma desideri fornire un'interfaccia di registrazione, forse un buon modo è consentire all'utente (della libreria) di fornire un callback.

Durante l'inizializzazione della registrazione con la tua libreria, dovranno specificare il callback, quindi spetta a loro il codice di colla per farlo funzionare bene con qualunque cosa abbiano.

Se riesci a far sì che la firma della richiamata assomigli a una funzione standard che potrebbero sempre avere a disposizione, fornirà loro un'opzione predefinita semplice se in realtà non dispongono di un logger.

Inoltre, il chiamante potrebbe aver istanziato più volte i componenti della libreria e, per problemi di conflitto di risorse o threading, desidera fornire un callback del logger diverso per ciascuno di essi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top