Думаючи про гнучку розробку програмного забезпечення та всі принципи (SRP, OCP, ...), я запитую себе, як ставитись до ведення журналів.
Чи реєстрація поруч із впровадженням є порушенням SRP?
Я б сказав, yes
тому що реалізація також має бути спроможна запускатись без реєстрації. Тож як я можу краще реалізувати ведення журналу? Я перевірив деякі шаблони і дійшов висновку, що найкращий спосіб не порушувати принципи визначеним користувачем способом, а використовувати будь-який шаблон, який, як відомо, порушує принцип, - це використовувати шаблон декоратора.
Скажімо, у нас є маса компонентів повністю без порушення SRP, і тоді ми хочемо додати журнал.
- компонент А
- компонент В використовує A
Ми хочемо вести журнал для A, тому ми створюємо ще один компонент D, прикрашений A, що реалізує інтерфейс I.
- інтерфейс I
- компонент L (компонент реєстрації системи)
- компонент A реалізує I
- компонент D реалізує I, декорує / використовує A, використовує L для ведення журналів
- компонент B використовує I
Переваги: - Я можу використовувати A без реєстрації - тестування A означає, що мені не потрібні макети реєстрації - тести простіші
Недолік: - більше компонентів і більше тестів
Я знаю, що це, здається, ще одне питання відкритої дискусії, але я насправді хочу знати, чи хтось використовує кращі стратегії реєстрації журналів, ніж декоратор чи порушення SRP. Що з статичним одиночним реєстратором, який є за замовчуванням NullLogger, і якщо потрібен syslog-журнал, потрібно змінити об'єкт реалізації під час виконання?