Логирование¶
Если вы добавляете отладочную печать в код модуля, то, вероятно, вы нарушаете Single Responsibility Principle. Рассмотрим 2 случая.
Для отладки модуля в продакшене вам, как программисту, нужно собрать некоторые логи. И вы решаете добавить отладочную печать прямо в этот модуль. Т.е. инициатором изменения в коде являетесь вы, а не «владелец» модуля (например аналитик). Таким образом вы нарушаете SRP. Что, например, выльется в конфликты в системе контроля версий, когда другой разработчик внесет запрошенные аналитиком изменения.
Аналитику для принятия некоего решения потребовалось собрать статистику. В этом случае стоит ввести абстракцию логгера, как мы это делали, например для генератора идентификаторов.
В первом случае логирование нужно добавлять в подпроекте main. Т.е. воспользоваться Open-Close Principle, расширить поведение без модификации артефакта.
Можно использовать паттерн декоратор.
Например, мы хотим знать, какую длину паролей используют наши пользователи. Для этого нам нужно обернуть реализацию PasswordHasher в соответствующий декоратор.
Если мы хотим залогировать вызов функции, то можем применить декоратор к переменной, содержащей эту функцию.
Воспользуемся alter-var-root
или robert-hooke.