Размышляя о гибкой разработке программного обеспечения и всех принципах (SRP, OCP, ...), я спрашиваю себя, как относиться к ведению журнала.
Является ли регистрация рядом с реализацией нарушением SRP?
Я бы сказал, yes
потому что реализация должна быть в состоянии работать без регистрации. Итак, как я могу реализовать ведение журнала лучше? Я проверил некоторые шаблоны и пришел к выводу, что лучший способ не нарушать принципы определенным пользователем способом, а использовать любой шаблон, который, как известно, нарушает принцип, состоит в использовании шаблона декоратора.
Допустим, у нас есть куча компонентов полностью без нарушения SRP, а затем мы хотим добавить ведение журнала.
- компонент А
- компонент B использует A
Нам нужна регистрация для A, поэтому мы создаем еще один компонент D, украшенный A и реализующий интерфейс I.
- интерфейс I
- компонент L (компонент регистрации системы)
- компонент А реализует I
- компонент D реализует I, украшает / использует A, использует L для регистрации
- Компонент B использует I
Преимущества: - я могу использовать A без регистрации - тестирование означает, что мне не нужны никакие журналы - тесты проще
Недостаток: - больше компонентов и больше тестов
Я знаю, что это, кажется, еще один вопрос открытой дискуссии, но на самом деле я хочу знать, использует ли кто-то лучшие стратегии ведения журналов, чем декоратор или нарушение SRP. Как насчет статического одноэлементного регистратора, который по умолчанию является NullLogger, и если требуется ведение журнала syslog, можно изменить объект реализации во время выполнения?