Quale modello (modello) sarebbe adatto per astrarre le piattaforme di registrazione?

4

Ho bisogno di creare un sistema semplice per astrarre le piattaforme di registrazione. L'idea è che mi piacerebbe essere in grado di scambiare o attivare una piattaforma di registrazione ( nlog , log4net , enterprise library ) tramite la configurazione alcuni (questo non dovrebbe essere un problema) . So che avrei bisogno di un wrapper per ogni piattaforma che voglio supportare che carichi le dll necessarie e crei i logger.

Stavo pensando di creare una classe astratta o un'interfaccia che fornisca i metodi più comuni come Log , Debug , Trace , ecc.:

interface ILogger
{
    void Log(...);
    void Debug(...);
    // etc.
}

class NLogPlatform : ILogger
{
    // create nlog, load config etc.
}

class Log4NetPlatform : ILogger
{
    // create log4net, load config etc.
}

class LoggerFactory
{ 
    public static CreateLogger(...)
    {
        // read settings and create a logger.
    }
}

All'inizio pensavo a un provider di log, ma poi ho scoperto che il provider non è affatto un modello, quindi ho esaminato .NET Design Patterns ma in realtà non sembra essere adatto. Mi sono perso qualcosa o c'è solo un motivo per questo?

Non ho ancora iniziato davvero perché stavolta preferirei andare nella direzione destra dall'inizio, quindi rifattorizzare diversi strumenti in seguito.

Potresti dirmi cosa dovrei prendere in considerazione durante la progettazione di un tale sistema e se esiste un modello per questo?

    
posta t3chb0t 13.02.2015 - 19:25
fonte

2 risposte

6

Congratulazioni, hai (ri) scoperto il modello di adattatore dell'oggetto. Hai un'interfaccia di destinazione (qui: ILogger ) e varie classi di adattatori NLogPlatform , Log4NetPlatform , .... Ogni classe dell'adattatore si conforma all'interfaccia di destinazione e trasmette proxy a tutte le chiamate all'oggetto adaptee che contiene come membro.

Se vuoi rendere l'uso di questo modello più chiaro, chiamerei le classi dell'adattatore NLogAdapter ecc.

L'utilizzo di una factory per iniettare l'adattatore log corretto è del tutto ortogonale a questo, e riguarda il principio Dependency Inversion.

    
risposta data 13.02.2015 - 19:55
fonte
3
  1. Questo non ha nulla a che fare con i modelli di design ...

  2. Questo è un problema risolto, che è stato risolto più volte da quando è stato inventato .Net

  3. Basta usare Commons.Logging è una piccola libertà configurabile che fa esattamente quello che hai chiesto: link

risposta data 13.02.2015 - 20:09
fonte

Leggi altre domande sui tag