Найти тему
wcademy

Принцип единой ответственности (Single Responsibility Principle, SRP)

Каждый класс должен иметь только одну ответственность и она должна быть инкапсулирована внутри него.

Хотя как-то оно непонятно звучит. Давайте переформулируем в «одна сущность делает ровно одну вещь» (под сущностью можно понимать класс, функцию, может быть даже переменную).

Простейший пример:

(полностью этот код здесь)

Сколько вещей делает наша функция?

Только ли она получает информацию о температуре в городе? Не-а, она делает ещё что-то, а именно печатает её в консоль.

Эта функция отлично будет выполнять свою работу в консольной утилите, но что если нам нужно вывести эту температуру на веб-страницу?

Копипастить её?

А всё из-за нарушения SRP.

Обычно функциональность разделяют на три шага:

  • получение данных
  • обработка данных
  • вывод данных

Перепишем код, приведя его в соответствии с SRP:

Что мы сделали?

  • отделили получение данных в функцию fetch
  • сделали функцию получения погоды — теперь её можно легко переиспользовать вне зависимости от того, куда нам надо вывести эту информацию
  • и заодно отделили форматированию температуры — вдруг нам и формат захочется переиспользовать где-нибудь?

Из минусов только потеря оригинальной функции printTemp, но она настолько ничего не делает, что не имеет смысла её писать. Всем занимаются другие функции.

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

🚀Если узнал из статьи что-то полезное, ставь лайк и подписывайся на Дзене или группе ВК 😏

Если код не отображается - временно отключи блокировщик рекламы, это всё Дзен.

Все новые статьи можно найти на сайте - https://wcademy.ru/