Ответ
S в SOLID означает Принцип единственной ответственности (Single Responsibility Principle — SRP).
Формулировка: Один модуль (класс, функция) должен иметь одну и только одну причину для изменения. Иными словами, он должен отвечать за одну конкретную задачу или функциональность.
Цель: Уменьшение связности, упрощение понимания, тестирования, рефакторинга и сопровождения кода.
Пример нарушения SRP:
// Класс нарушает SRP, так как совмещает логику бизнес-сущности, сохранения и уведомления.
class User {
private String name;
private String email;
// Конструкторы, геттеры, сеттеры...
public void saveToDatabase() {
// Код для сохранения в БД
}
public void sendWelcomeEmail() {
// Код для отправки email
}
}
Пример c соблюдением SRP:
// Класс отвечает только за хранение данных пользователя.
class User {
private String name;
private String email;
// Конструкторы, геттеры, сеттеры...
}
// Класс отвечает только за операции с хранилищем (персистентность).
class UserRepository {
public void save(User user) {
// Код для сохранения в БД
}
}
// Класс отвечает только за отправку email-уведомлений.
class EmailService {
public void sendWelcomeEmail(User user) {
// Код для отправки email
}
}
Разделение ответственностей позволяет изменять логику отправки писем или способ сохранения, не затрагивая сущность User.