Ограничения и подводные камни

Как и в случае с SRP, проблемы с разделением интерфейсов возникают из трудностей проектирования и прогнозирования.

Слепое следование опасно

Слепое следование ISP грозит дроблению вообще всех интерфейсов на атомарные с одним методом или полем. Это похоже на атомарный CSS, когда каждое свойство описывается отдельным классом.

Но суть принципа не в том, чтобы раздробить интерфейсы, а в том, чтобы выделить минимально необходимое количество методов, чтобы реализующие его модули не зависели от ненужной функциональности.

Как понять, что интерфейс стал грязным

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

Конфликты ролей и иерархий

Интерфейсы можно условно поделить на роли: тип, поведение, ожидание (например в контракте) и др.

Иерархия ролей может конфликтовать с иерархией сущностей и модулей, которые реализуют интерфейсы. Это делает структуру системы сложной для понимания и может вводить в заблуждение при чтении кода.

Материалы к разделу