Вопрос проверяет понимание того, как правильно разделять ответственность между классами и модулями.
Принцип Single Responsibility говорит, что у класса должна быть только одна ответственность. Это значит, что у него должна быть одна причина для изменения. Если класс делает слишком много, его сложно тестировать и поддерживать. Разделение ответственности делает код понятнее и гибче. Этот принцип — основа чистой архитектуры.
Single Responsibility — самый простой для понимания принцип SOLID, но при этом один из самых часто нарушаемых.
Single Responsibility Principle означает, что класс или модуль должен отвечать только за одну часть логики системы.
Ответственность — это:
отдельная бизнес-задача
конкретная причина изменения кода
Если класс меняется по разным причинам, значит он нарушает SRP.
class UserService:
def create_user(self, data):
pass # логика создания
def save_to_db(self, user):
pass # работа с БД
def send_email(self, user):
pass # отправка письма
Этот класс:
управляет бизнес-логикой
работает с базой данных
отправляет письма
class UserCreator:
def create(self, data):
pass
class UserRepository:
def save(self, user):
pass
class EmailService:
def send(self, user):
pass
Теперь:
каждая часть отвечает за свою задачу
код легче тестировать
изменения не затрагивают лишнюю логику
SRP помогает:
уменьшить размер классов
упростить тесты
снизить связанность кода
Если класс сложно описать одним предложением — скорее всего, он нарушает Single Responsibility и его стоит разделить.