Принцип единой ответственности для многих методов

Как можно сохранить единоличную ответственность за класс, предназначенный для выполнения нескольких задач? Например, если я хочу написать код, представляющий калькулятор, который может складывать, вычитать, умножать и выполнять ряд различных вычислений, как я могу сделать так, чтобы разработка программного обеспечения соответствовала единой ответственности?

1 ответ

Принцип единой ответственности может применяться на нескольких уровнях. Уровень метода, уровень класса и даже уровень обслуживания (мышление микросервисов).

На уровне метода общедоступная функция add() применяется к SRP, если она выполняет только одно действие - добавление чисел. Он не должен отвечать, например, за синтаксический анализ команды добавления из командной строки консоли или вызова REST или чего-то еще, эта ответственность должна быть возложена на другое место.

Класс Calculator отвечает за выполнение различных видов вычислений, в данном случае сложение, вычитание и т. Д. Но он не несет ответственности, например, за команды синтаксического анализа или результаты рендеринга (например, создание вывода html для отображения).

И, учитывая уровень обслуживания, служба заказов должна нести ответственность за все, что касается обработки заказов или предоставления информации о заказах. Но он не должен нести ответственность за складирование продуктов и прочего.

Примечание: общедоступный метод класса, который внутренне использует частные методы, все еще может следовать SRP, поскольку общая задача метода связана с одной ответственностью. Например, общедоступный метод div() может использовать частный метод для проверки и обработки нежелательных делений на ноль. Этот частный метод снова соответствует SRP, поскольку он выполняет только одну задачу - обрабатывает деление на ноль, но все же вписывается в общую картину на уровне выше.

Другие вопросы по тегам