Программная инженерия Тема дня #2

Примечание. Первоначально это было написано и опубликовано во внутреннем Slack Armakuni Томом Орамом.

Принцип единой ответственности гласит:

У класса должна быть одна и только одна причина для изменения, а это означает, что у класса должна быть только одна работа.

Идея проста: если класс делает только одну вещь, то у него есть только одна причина для изменения. Часто это рассматривается просто как что-то вроде «класс не должен вычислять значение И выводить его на экран». Хотя это действительно отличное начало, принцип немного тоньше — мне особенно нравится следующая цитата:

Этот принцип касается людей.

Когда вы пишете программный модуль, вы хотите убедиться, что когда запрашиваются изменения, эти изменения могут исходить только от одного человека или, скорее, от одной тесно связанной группы людей, представляющих одну узко определенную бизнес-функцию. Вы хотите изолировать свои модули от сложностей организации в целом и спроектировать свои системы таким образом, чтобы каждый модуль отвечал (отвечал) потребностям только этой одной бизнес-функции.

ИМХО, эта информация делает SRP больше для обеспечения того, чтобы класс имел единую ответственность перед одним человеком. Это очень мощно, поскольку означает, что у него не может быть противоречивых требований, исходящих из разных мест. Это также делает его очень актуальным за пределами ООП (например, при создании микросервисов) и тесно согласуется с идеями DDD и закона Конвея.

В. Как вы определяете, нарушает ли курс SRP?