intermediate
Interface Segregation Principle
Разделяйте broad contracts на role-specific capabilities, чтобы clients зависели только от operations, которые им реально нужны.
ISP: клиенты не зависят от методов, которые не используют — делите жирные interfaces на role-specific. `Machine` с print и scan → `Printer` и `Scanner`, чтобы простой клиент не реализовывал no-op stubs.
Меньшие interfaces упрощают mocks, adapters и эволюцию, когда меняется одна роль.
На интервью: bloated repository interface на read/write ports.
Типовые ошибки: interface на каждый method; разрыв связного atomic use-case; persistence в именах segregated API.
Компромисс — больше типов interfaces против более лёгких dependents и тестов.
Чеклист:
- Методы по роли клиента.
- Без принудительных пустых реализаций.
- Связные atomic use-cases целостны.