Экземпляр EventLog против статических методов - предпочтение? - PullRequest
4 голосов
/ 18 ноября 2011

При записи в журнал событий я могу создать экземпляр EventLog, удерживать его как переменную-член и вызывать WriteEntry (строковое сообщение) для него каждый раз, когда я хочу записать сообщение.

В качестве альтернативыЯ могу просто вызвать статическую версию: EventLog.WriteEntry (строковый источник, строковое сообщение).

Должен ли я предпочесть одну альтернативу другой?

В моей текущей ситуации я намереваюсь получитьПользовательский журнал с одним или двумя источниками.

Ответы [ 2 ]

6 голосов
/ 18 ноября 2011

Если вы пишете тестовый код или модульное тестирование своего кода, использование статического класса не рекомендуется.

Я бы обернул EventLog в класс, который реализует общий интерфейс ILog. Вы можете внедрить этот класс или создать его в каждом классе, который его использует. Это должно дать вам максимальную гибкость в будущем, если вам нужно заменить EventLog другим методом ведения журнала.

Пример интерфейса:

public interface ILog
{ 
        void Info(string format, params object[] args);

        void Warn(string format, params object[] args);

        void Error(Exception exception);
} 

Вы можете расширить или изменить это, чтобы создать контракт, который имеет смысл для вас.

1 голос
/ 18 ноября 2011

Лучше реализовать шаблон Singleton для этого случая

class Logger
{
    private static Logger log = null;
    private void Logger()
    {
        setLevel(Logger.INFO);
    }
    public static Logger getLog()
    {
        if (log == null)
        {
            log = new Logger();
        }
        return log;
    }
}
...