Я знаю, что регистрация является основным прецедентом для АОП. Кроме того, обертки журналов также показаны в качестве случаев, когда вы хотите использовать DI, чтобы классы не были связаны с конкретной реализацией ведения журнала. Тем не менее, некоторые считают, что протоколирование обертки является анти-шаблоном. Прежде всего, такое мнение связано с тем, что в большинстве случаев обертка имеет тенденцию быть упрощенной и удаляет многие функции, специфичные для структуры ведения журнала. Если вы реализуете эти конкретные функции, почему бы просто не использовать инфраструктуру напрямую.
Я знаю об Common.Logging, который пытается абстрагировать большое количество функций log4Net, EntLib, NLog для вас, Однако даже здесь мы все еще имеем зависимость от Common.Logging. Не в способе тестирования кода/модуля в отношении интерфейсов и т.д., Но если проект умирает (прошло более года с момента последней версии), или вы хотите, чтобы последний переключился на журнал, который не поддерживается, это может вызвать проблемы.
Тем не менее, , если ведение журнала достигается с помощью AOP, даже необходимо использовать DI для зависимостей ведения журнала (то есть, почему бы просто не ссылаться прямо на NLog)? Да, что часть кода AOP будет тесно связана, но логика классов, для которых требуется unit test, лишена зависимостей ведения журнала (по крайней мере, до того, как произойдет переплетение). В этот момент я немного потерял (я еще не пробовал АОП). После ткачества, не использовав DI для кода AOP, вызывают проблемы для модульного тестирования тестируемого метода? Или может один unit test без плетения кода AOP?
Если для пользователя программного обеспечения не требуется ведение журнала, я не уверен, насколько полезно проверить, что ведение журнала произошло с помощью mocks. Я бы подумал, что бизнес-логика тестируемого метода - это то, что больше всего будет интересовать тестирование. Наконец, если вы хотите использовать TDD/BDD, не нужно ли использовать DI для зависимостей ведения журнала в коде AOP? Или просто не будет тестировать сторону AOP?
Как вы можете видеть, я пытаюсь понять, что наиболее практичный подход заключается в разработке приложения, которое будет использовать AOP для сквозных задач и DI для проектирования/тестирования. Поскольку AOP является относительно новым, и наиболее часто встречающийся журнал, каков рекомендуемый подход?