# SRP

![Принцип единственной ответственности](https://39190370-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LQeEHunlKeh_8XlJvTd%2F-LQeHlNoD4VEzg1-NSFf%2F-LQeHsghv9XrSGLN_YZ5%2Fimage.png?alt=media\&token=d82ecc5c-7c9c-48a2-a163-58d193b7f30b)

&#x20;SRP звучит так:

> &#x20;Существует лишь одна причина, приводящая к изменению класса.

Ответственность – это причина изменения кода.

Если при изменении кода, отвечающего за одну ответственность, в приложении появляются исправления кода, отвечающего за другую ответственность – есть нарушения SRP.

Антипаттерн – божественный объект.

{% hint style="info" %}
Собирайте вместе тот функционал, который будет изменяться единовременно и по одной причине. И разделяйте то, что изменяется в разное время по разным причинам.&#x20;
{% endhint %}

### Пример нарушения SRP

```javascript
class Employee {
    /**
     * 1-я ответственность
     *
     * Бизнес-логика
     */
    calculatePay () {
        // ...
    }

    /**
     * 2-я ответственность
     *
     * Управление сохранением
     */
    save () {
        // ...
    }
}
```

От класса Employee зависят сразу 2 актора:

* бухгалтерия (метод calculatePay)
* администраторы БД (метод save)

{% hint style="info" %}
Актор - лицо, заинтересованное в изменении кода.
{% endhint %}

Бизнес-логика по природе своей изменяется довольно часто. Механизмы сохранения изменяются гораздо реже и совсем по другим причинам.
