Ну, я полагаю, первое, что нужно отметить, это то, что это всего лишь хорошие принципы разработки программного обеспечения - вы должны также принять суждение. Так что в этом смысле - нет, они не сплошные (!)
Я думаю, что вопрос, который вы задали, поднимает ключевой вопрос - как вы определяете единственную ответственность, которую должен иметь класс?
Важно не слишком зацикливаться на деталях при определении ответственности - просто потому, что класс делает много вещей в коде, не означает, что у него много обязанностей.
Однако, пожалуйста, придерживайтесь этого. Хотя это, вероятно, невозможно применить во всех случаях - это все же лучше, чем иметь в своем коде один «объект Бога» (Anti-Pattern).
Если у вас возникли проблемы с этим, я бы порекомендовал прочитать следующее:
Рефакторинг - Мартин Фаулер: Хотя речь идет, очевидно, о рефакторинге, эта книга также очень полезна для демонстрации того, как разбить проблемы на их логические части или обязанности - что является ключом к SRP. Эта книга также затрагивает другие принципы - однако она делает это намного менее академическим способом, чем вы, возможно, видели раньше.
Чистый код - Роберт Мартин: Кого лучше читать, чем величайшего представителя принципов ТВЕРДЫХ. Серьезно, я обнаружил, что это действительно полезная книга во всех областях мастерства программного обеспечения, а не только в принципах SOLID. Как и книга Фаулера, эта книга представлена на всех уровнях опыта, поэтому я рекомендую всем.