Ограничения и подводные камни
У каждого принципа есть ограничения и область применения. Для SRP характерны следующие ограничения и подводные камни.
Слепое следование опасно
Слепое следование принципу (например, преждевременная оптимизация) может создать лишние абстракции и сделать программу чрезмерно сложной. Использовать SRP стоит тогда, когда вносить изменения в класс, нарушающий его, становится дорого.
Трудность начального проектирования
Выделить зоны ответственности сущностей при первичном проектировании иногда бывает трудно. Взаимодействие сущностей может быть неочевидным, из-за чего проектировщикам может быть трудно определиться с методами классов. В этом случае могут помочь прототипирование и диаграммное моделирование (UML, DFD, ERD, IDEF).
Разработка через тестирование — не панацея, а инструмент
Считается, что разработка через тестирование (TDD) может помочь выделить в классах необходимые методы, но это тоже помогает не всегда. TDD определённо показывает, каким будет видеть наше API пользователь, но он не всегда помогает выделить зоны ответственности модулей.