Является ли упаковка log4net для уменьшения связи антипаттерном? - PullRequest
3 голосов
/ 24 декабря 2009

Является ли упаковка log4net для уменьшения связи антипаттерном? Или внедрение экземпляра регистратора в публичную собственность антипаттерна? Как вы подходите к зависимости log4net?

Ответы [ 3 ]

1 голос
/ 25 июня 2013

Оберните регистратор по следующим причинам -

  1. Он изолирует изменения только от регистратора, в будущем, если вы захотите изменить его на что-то лучшее, без каскадных изменений.
  2. Это облегчает вашу жизнь, когда вы хотите написать контрольные примеры. Вы можете легко издеваться над необходимыми вещами.
  3. Если по каким-либо причинам вам необходимо иметь более одного регистратора в приложении, то оболочка поможет. Вы можете изменить регистратор через какую-то фабрику / реестр. Например, если код используется для разных платформ / сред, где вы хотите использовать разные средства ведения журнала. Вы можете сделать это заводом / реестром.

Итак, мой взгляд хорош, чтобы обернуть его.

0 голосов
/ 14 октября 2011

Мы определяем интерфейс ведения журнала и имеем реализацию log4net, реализацию unitTest и реализацию null.

Мы используем внедрение зависимостей, чтобы передать реализацию loggingInterface.

Реализация модульного теста имеет дополнительные методы, такие как 'bool ErrorWasLogged ()', так что в наших модульных тестах мы можем утверждать, что важная информация регистрируется. Для тестов, где мы не заинтересованы в тестировании того, что было зарегистрировано, мы используем реализацию null.

0 голосов
/ 16 июня 2011

Сервисный локатор * считается анти-паттерном многими на переднем крае сообщества .NET. Я бы сказал, что ведение журнала - это очень полезная функция наших приложений. Это по сути "только для записи". Мы никогда не принимаем решения на основе запросов системы журналирования.

log4net - это также система, которую легко отключить, она не выдает исключений, молча терпит неудачу, может обновлять свою конфигурацию на лету ... практически нет причин менять реализации после ее входа.

Итак, я говорю, что в коде приложения можно использовать его напрямую.

...