Принцип разделения интерфейсов (ISP), сформулированный Робертом Мартином, гласит: клиенты не должны зависеть от методов, которые они не используют. На практике это означает создание узких абстракций, соответствующих конкретным задачам, вместо использования «жирных» интерфейсов для всех сценариев.

Распространенная ошибка — стремление дробить интерфейсы до одного метода на файл. Это приводит к созданию избыточного количества файлов, что усложняет поддержку кода и не несет архитектурной пользы. Принцип ISP не требует максимального дробления, а направлен на устранение лишних зависимостей клиента.

Применять ISP следует, анализируя реальные потребности клиентов. Например, если один сервис только считывает данные, а другой — записывает, их стоит разделить на FeedbackReader и FeedbackWriter. При этом сам класс-реализация может содержать оба метода, но клиенты будут видеть только нужную им часть.

Чрезмерное дробление интерфейсов противоречит принципам YAGNI и KISS. Если набор вызовов у клиентов совпадает, один интерфейс с несколькими методами предпочтительнее, чем набор микроинтерфейсов. Резать интерфейс нужно тогда, когда клиенты действительно различаются по своим задачам, а не по количеству строк.

Правильная реализация ISP помогает избежать случайных вызовов лишних методов, например, несанкционированного удаления данных или ненужной синхронизации с CRM. Это упрощает написание тестов и делает архитектуру системы более предсказуемой, предотвращая появление «зоопарка» из множества мелких контрактов.