SRP — первый из принципов SOLID, подразумевает, что у каждой сущности (модуля, сервиса, класса) должна быть только одна причина для изменения. На архитектурном уровне это достигается дроблением системы на сервисы/модули по областям ответственности. Например, отдельный сервис регистрирует пользователей, второй управляет платежами, третий — отправляет уведомления.
Пример на Node.js:
// userService.js module.exports = { registerUser(data) { /* регистрация */ } } // paymentService.js module.exports = { processPayment(order) { /* обработка оплаты */ } } // notificationService.js module.exports = { sendEmail(user, content) { /* отправка писем */ } }
Ключевые особенности:
Означает ли SRP, что сервис не может взаимодействовать с другими сервисами?
Нет. Сервисы могут взаимодействовать через четко определённые API, сохраняя собственную ответственность за бизнес-операции внутри.
Можно ли реализовать SRP без разделения на отдельные файлы или проекты?
Технически возможно, но для масштабируемости и читаемости кода рекомендуется разделение по физическим единицам: отдельные файлы, пакеты, сервисы.
SRP только для кода или для архитектуры в целом?
SRP актуален на всех уровнях: от проектирования сервисов/модулей до написания конкретных классов и функций.