Определение - у модуля должна быть одна причина для изменения.

Под ответственностью понимаем ось изменений, которая проходит через наш модуль.

Таким образом у модулей есть две основные характеристики:

Мартин определяет ответственность как причину изменения и заключает, что модули должны иметь одну и только одну причину для изменений. Например, представьте себе модуль, который составляет и печатает отчёт. Такой модуль может измениться по двум причинам:

  1. может измениться само содержимое отчёта
  2. может измениться формат отчёта.

Логично, что оба аспекта этих причин на самом деле являются двумя разными ответственностями. SRP говорит, что в таком случае нужно разделить модуль на два новых, для которых будет характерна только одна ответственность. Причина, почему нужно сохранять направленность классов на единственную цель в том, что это делает модули более здоровыми. Что касается класса, приведённого выше, если произошло изменение в процессе составления отчёта — есть большая вероятность, что в негодность придёт код, отвечающий за печать.

При разработке различных поведений одного модуля часто появляется «Божественный объект», который в ООП считается антипаттерном. Соблюдение принципа единственной ответственности позволяет избегать этого антипаттерна.

God Object (божественный объект)