Quale schema di progettazione è disponibile per fornire un'interfaccia generale del logger?

-1

Ho una libreria in cui voglio usare un logger ma non ho (e non posso) creare alcuna interfaccia per questo perché la userò su sistemi diversi che non hanno nulla in comune (e non avranno ). Quindi questo non funzionerà:

public void Foo(ILogger logger, ... other params)
{
    logger.Info(...):
}

Per superare questo problema e per rendere possibile l'utilizzo di qualsiasi framework di registrazione che utilizza un particolare sistema, ho trovato questa soluzione:

Ho creato una classe che forniva delegati per i metodi di registrazione:

public class LoggerProxy
{
    private Action<string> _info;

    public LoggerProxy(Action<string> info)
    {
        _info = info;
    }

    public void Info(string message)
    {
        if (_info != null) _info(message);
    }
}

E lo userei in questo modo:

static void Main()
{
    var logger = new LoggerProxy(SomeLoggingSystem.Info);
    Foo(logger, ...);
}

public void Foo(LoggerProxy logger, ... other params)
{
    logger.Info(...):
}

Lo chiamo proxy ma sono curioso di sapere se è davvero un proxy o forse un adattatore o ancora qualcos'altro. Ho letto le risposte a come fanno le Proxy, Decorator, Adapter e Bridge Patterns differiscono? ma non posso dire di poter dire con certezza che nessuno di questi nomi va bene qui.

    
posta t3chb0t 07.01.2016 - 10:17
fonte

1 risposta

1

In base al codice fornito LoggerProxy è solo una semplice classe che non segue alcun pattern famoso, dicendo che il modello più vicino a cui vorrei confrontarlo è singleton (non che io consiglio di usarlo almeno ancora).

Poiché sembra che tu stia cercando un'interfaccia di registrazione ben progettata, ti consiglierei di leggere le risposte in questo post SO,

È una buona pratica avere logger come singleton?

Torna alla tua classe LoggerProxy con le informazioni fornite che sembra non seguire l'approccio OOP - solo una semplice programmazione procedurale direi.

    
risposta data 07.01.2016 - 12:13
fonte

Leggi altre domande sui tag