Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
# S в SOLID: Single Responsibility Principle
Single Responsibility Principle (принцип единственной ответственности) — первый принцип SOLID, который гласит: класс должен иметь одну и только одну причину для изменения. Иными словами, класс должен быть ответствен только за одно изменение в требованиях приложения.
Суть принципа
Каждый класс должен иметь одну область ответственности — одну причину для изменения. Это делает код более модульным, понятным и легким в поддержке.
Пример нарушения SRP
// ❌ Плохо: класс отвечает за слишком много
public class UserManager {
// Ответственность 1: управление пользователем
public void createUser(String name, String email) {
// создание пользователя
}
// Ответственность 2: сохранение в БД
public void saveToDatabase(User user) {
// сохранение в БД
}
// Ответственность 3: отправка email
public void sendWelcomeEmail(User user) {
// отправка письма
}
// Ответственность 4: логирование
public void logActivity(String message) {
// логирование
}
}
Этот класс нарушает SRP, так как имеет 4 разные ответственности. Если нужно изменить способ отправки email, логирования или работы с БД — нужно изменять один и тот же класс.
Правильное применение SRP
// ✅ Хорошо: каждый класс имеет одну ответственность
// Класс 1: управление пользователем
public class User {
private String name;
private String email;
public User(String name, String email) {
this.name = name;
this.email = email;
}
public String getName() { return name; }
public String getEmail() { return email; }
}
// Класс 2: создание пользователя
public class UserCreator {
public User createUser(String name, String email) {
return new User(name, email);
}
}
// Класс 3: сохранение в БД
public class UserRepository {
public void save(User user) {
// сохранение в БД
System.out.println("User saved: " + user.getName());
}
}
// Класс 4: отправка email
public class EmailService {
public void sendWelcomeEmail(User user) {
System.out.println("Welcome email sent to: " + user.getEmail());
}
}
// Класс 5: логирование
public class Logger {
public void log(String message) {
System.out.println("[LOG] " + message);
}
}
// Использование
public class UserRegistration {
private UserCreator userCreator = new UserCreator();
private UserRepository userRepository = new UserRepository();
private EmailService emailService = new EmailService();
private Logger logger = new Logger();
public void register(String name, String email) {
User user = userCreator.createUser(name, email);
userRepository.save(user);
emailService.sendWelcomeEmail(user);
logger.log("User registered: " + name);
}
}
Преимущества SRP
- Легче тестировать — каждый класс тестируется отдельно
- Проще поддерживать — изменения затрагивают только нужный класс
- Переиспользование — классы легче использовать в других местах
- Ясность кода — сразу понятна ответственность класса
- Гибкость — легко заменять реализацию
Практические рекомендации
- Если описание класса содержит слово "и" (например, "UserManager и EmailSender"), скорее всего, нарушен SRP
- Одна причина для изменения = одна ответственность
- Используй dependency injection для связи между классами
- Старайся держать классы компактными (200-300 строк максимум)
SRP — это фундамент, на котором строятся остальные принципы SOLID.