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