2013-11-19 2 views
2

Я столкнулся с проблемой реализации регистрации в моей библиотеке классов C#, которая является моделью домена. Моя главная цель - сохранить возможности ведения журнала как канонические и развязанные, насколько это возможно. Обычно протоколирование сообщений записывается в файлы и, возможно, выводит окно во время отладки.Внедрить функции ведения журнала с использованием событий в библиотеке классов C# - это хорошая практика?

В настоящее время я использую log4net, и я написал статический класс Logger, который сам реализует методы ведения журнала. Итак, когда методы в объектах домена выполняются, они вызывают статические методы Logger.Log().

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

Так что вопрос:

событий на основе регистрации в целом, и в частности, в библиотеках классов, это хорошая идея или нет? И почему?

Спасибо за чтение.

+4

Это мое мнение, но я думаю, что это оставит вас создать кучу ненужных событий в вашем коде, где единственным слушателем будет обработчик ведения журнала. Это кажется особенно трудным оправдать в моем сознании. Если вы действительно хотите СУБДАТЬ свой код, вы можете посмотреть на структуру AOP, такую ​​как [PostSharp] (http://www.postsharp.net/), которая может добавить запись в ваш код, не делая ваши глаза кровоточащими. – Josh

+0

@ Хорошо, я частично согласен, хотя я бы попытался инвестировать в «богатый LogEventArgs», так что у меня было бы очень мало или даже один «Logger.Log()» однострочный для журнала событий. (ну, может быть, это проще сказать, чем сделать ...) – heltonbiker

+0

В качестве примечания: регистратор как статический класс делает ваш код сложнее проверить. – BartoszKP

ответ

3

Использование событий для ведения журнала также открывает много возможностей для утечки памяти!

Я бы использовал Injection Dependency для перекрестных проблем, таких как ведение журнала.

С DI у вас есть возможность либо ввести его, либо использовать перехват.

Смежные вопросы