Ответ
Принцип разделения интерфейса (Interface Segregation Principle, ISP) — один из принципов SOLID. Он гласит: «Клиенты не должны зависеть от методов, которые они не используют». На практике это означает, что лучше создавать множество узкоспециализированных интерфейсов (протоколов в Swift), чем один «толстый» универсальный интерфейс.
Проблема — нарушение ISP:
// "Толстый" протокол, заставляющий реализовывать ненужные методы
protocol Worker {
func code()
func test()
func deploy()
func cook() // Не относится к обязанностям программиста
}
class Programmer: Worker {
func code() { /* ... */ }
func test() { /* ... */ }
func deploy() { /* ... */ }
func cook() { // Программист вынужден реализовать этот метод
fatalError("Программист не должен готовить!")
}
}
Решение — следование ISP:
// Разделяем на специфичные протоколы
protocol Coder {
func code()
}
protocol Tester {
func test()
}
protocol DevOps {
func deploy()
}
protocol Cook {
func cook()
}
// Классы реализуют только нужные им протоколы
class Programmer: Coder, Tester { /* реализует code() и test() */ }
class Chef: Cook { /* реализует cook() */ }
Преимущества ISP:
- Уменьшает связность (coupling): классы зависят только от необходимого функционала.
- Повышает ясность: протоколы четко описывают конкретную роль.
- Упрощает тестирование и модификацию: изменения в одном протоколе затрагивают меньше классов.