> For the complete documentation index, see [llms.txt](https://marchenko.gitbook.io/solid/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://marchenko.gitbook.io/solid/srp.md).

# SRP

Принцип единственной ответственности | Single Responsibility Principle | 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 %}

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