Нарушает ли функция SRP, если помимо основной цели регистрирует ошибки?

Нарушает ли этот код принцип SRP?

function sendError(error) {
    log(error);
    response.status(500).send(error.message);
}

person matchish    schedule 23.01.2019    source источник
comment
Нет. Наверное, этот вопрос лучше подходит для Code Review. codereview.stackexchange.com В любом случае ведение журнала и трассировка — это задачи, которые полностью пересекаются с любой другой задачей, поэтому, если вызов log() сделано только для диагностических целей, я был бы не против иметь его в той же функции   -  person A. Chiesa    schedule 24.01.2019


Ответы (1)


Краткий ответ будет да, в значительной степени.

SRP утверждает, что поведение, которое меняется вместе, должно жить вместе.

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

В вашей функции ведение журнала может быть применимо и не нарушать SRP, поскольку оно изменяется вместе, но то, как мы справляемся с этой сквозной проблемой, может быть улучшено.

То, как вы обрабатываете ведение журнала, будет сильно зависеть от используемой вами среды. Хотя принципы остаются прежними. Основные правила таковы:

1. Вы хотите вести журнал в одном месте, а не во всем приложении.

2 - Вы хотите бросить как можно раньше и поймать как можно позже. (Это оставляет вам большую трассировку стека, помогающую понять, что пошло не так.)

Для достижения этого наиболее распространенным решением является использование промежуточного программного обеспечения. Такие библиотеки, как Express, это позволяют. Ваше специальное промежуточное ПО может перехватывать исключения в последний момент и регистрировать все необработанные исключения.

Сквозными проблемами следует тщательно управлять, так как они могут очень легко раздуть и сломать код.

Для дополнительного чтения по этому вопросу вы можете прочитать о перекрестных проблемах и аспектно-ориентированном программировании.

Дайте мне знать, если есть что-то, что я могу уточнить дальше. :)

person Marcel-Is-Hier    schedule 31.01.2019