Демистификация принципов SOLID — (S)

Apr 17 2023
Принцип единой ответственности
Класс должен отвечать только за одну единственную цель, а это означает, что класс должен выполнять только один тип задания, например (логика базы данных, логика ведения журнала и т. д.). Пример сценария Рассмотрим приложение, которое вычисляет сумму площадей всех фигур (круг, квадрат, треугольник и т. д.).

Класс должен отвечать только за одну единственную цель, а это означает, что класс должен выполнять только один тип задания, например (логика базы данных, логика ведения журнала и т. д.).

Пример сценария

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

Плохо написано

В классе AreaCalculator мы не только вычисляем сумму площадей предоставленных фигур, но и выводим данные в формате JSON. Рассмотрим сценарий, в котором выходные данные должны быть преобразованы в другой формат, например CSV, HTML и т. д.

Этот код функционально корректен, но нарушает принцип единой ответственности. Класс AreaCalculator должен вычислять только сумму площадей предоставленных фигур. Это не должно быть связано с отображением данных в JSON или любом другом формате.

Хорошо написан

Чтобы исправить это нарушение, нам нужно создать отдельный класс для обработки вывода данных из класса AreaCalculator . Этот новый класс AreaCalculatorDisplay будет обрабатывать логику вывода данных в любом заданном формате.

Основные преимущества

  1. Тестирование . Класс с одной обязанностью будет иметь гораздо меньше тестовых случаев.
  2. Нижняя связанность . Меньшая функциональность в одном классе будет иметь меньше зависимостей.
  3. Организация . Меньшие, хорошо организованные классы легче искать, чем монолитные.