gKrokod / botReborn

try handle pattern
BSD 3-Clause "New" or "Revised" License
0 stars 0 forks source link

logMessage #16

Open olgaklimenko opened 5 days ago

olgaklimenko commented 5 days ago

Handlers.Logger.logMessage принимает первым параметром logHandle, который инициализируется при старте приложения и при каждом вызове функции логирования он одинаковый. Предлагаю оптимизировать код, передав logHandle в logMessage один раз на уровне инициализации.

gKrokod commented 1 day ago

Понял. Подумаю, как сделать. А это не противоречит самому духу архитектуры handle pattern, когда можно в любом месте изменить поведение подменив функции, например, на запись в файл?

olgaklimenko commented 21 hours ago

Я поняла, что ты имеешь в виду, но думаю, это не противоречит handle pattern. Гибкость для изменения поведения, к которой мы стремимся, используя хэндл паттерн, сохранится, даже если logHandle передавать один раз на уровне инициализации. Если понадобится изменить его (например, начать логировать в файл), это можно сделать через конфигурацию или при повторной инициализации, а не через передачу в каждый вызов функции.

Логгер обычно задается для всей системы в зависимости от окружения, где запущен проект. Если бы logHandle у тебя в проекте действительно менялся для разных функций (хотя, думаю, это не очень частый кейс в реальности), тогда такой подход мог бы иметь смысл. Но в данном случае, думаю, оптимизация оправдана.

olgaklimenko commented 21 hours ago

Могу предложить интуитивный лайфхак, который чаще всего срабатывает (как минимум должен быть маркером того, чтобы посмотреть, можно ли отрефакторить код). Если в сигнатуре функции ты видишь постоянно повторяющийся аргумент, который связан с вещами, которые настраиваются один раз при старте проекта (например, конфиги, логгеры или что-то зависящее от окружения), то велика вероятность, что этот параметр не нужно тащить через весь код. Вместо этого можно частично применить функцию на уровне инициализации или положить его в Reader, чтобы избавить код от излишней передачи параметров.