Что утверждает Interface Segregation Principle?
Клиенты не должны зависеть от методов, которыми не пользуются: лучше несколько узких интерфейсов под роли, чем один толстый. Толстый интерфейс создаёт ложную связанность, а реализации вынуждены писать заглушки.
- Пример: Reader и Writer вместо одного FileAccess
- java.sql.Connection — десятки методов
- Признак нарушения — методы с UnsupportedOperationException
А ещё В Spring Data — Repository, CrudRepository, PagingAndSortingRepository на выбор
Подробно
ISP смотрит со стороны клиента: зависимость от толстого интерфейса создаёт ложную связанность — клиента задевают изменения методов, которые он не вызывает, а реализации вынуждены писать заглушки. Пример из платформы — java.sql.Connection с несколькими десятками методов. Чинится разделением по ролям: OrderReader и OrderWriter вместо всеобъемлющего OrderService.
Что хотят услышать
- Формулировка со стороны клиента.
- Последствия толстого интерфейса.
Частые ошибки
- Считать, что default-методы Java 8 решают проблему ISP: они убирают боль реализации, но клиент по-прежнему зависит от раздутого контракта.
- Разделять интерфейсы по реализации, а не по потребностям клиентов.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Интерфейсы нельзя расширять другими интерфейсами
- ✓Клиенты не должны зависеть от методов, которыми не пользуются
- ✗Каждый класс должен реализовывать хотя бы один интерфейс на каждого клиента
- ✗У интерфейса должно быть не больше одной реализации
Что спросят дальше
- Как ISP связан с LSP и UnsupportedOperationException?
- Может ли одна реализация имплементировать оба узких интерфейса?
Разбор темы
- SOLID: пять принципов дизайна
SRP, OCP, LSP, ISP, DIP — что каждая буква значит на самом деле, как выглядит нарушение в Java-коде, чем DIP отличается от DI и IoC.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.