Ответ
Плюсы:
- Улучшает читаемость и поддерживаемость кода
- Уменьшает связанность компонентов (low coupling)
- Облегчает тестирование и рефакторинг
- Повышает гибкость архитектуры
Минусы:
- Избыточная абстракция может усложнить простые задачи
- Требует больше времени на проектирование
- Не всегда применим в небольших проектах
Пример нарушения SRP (Single Responsibility Principle):
// Плохо: класс занимается и логикой, и рендерингом
class User {
constructor(data) { this.data = data; }
saveToDB() { /* ... */ }
render() { /* ... */ }
}