Вопрос проверяет умение проектировать протоколы и интерфейсы так, чтобы они не навязывали лишнюю функциональность.
Принцип Interface Segregation говорит о том, что клиенты не должны зависеть от методов, которые они не используют. Вместо одного большого интерфейса лучше иметь несколько маленьких и специализированных. Это упрощает реализацию и снижает связанность между компонентами. Классы реализуют только те протоколы, которые им действительно нужны. Такой подход делает код более гибким и понятным.
Принцип Interface Segregation помогает бороться с «толстыми» интерфейсами.
Interface Segregation Principle (ISP) — клиенты не должны зависеть от интерфейсов, которые они не используют.
Перед применением принципа важно понять, что интерфейс — это контракт.
Если контракт слишком большой, его сложнее реализовывать и поддерживать.
protocol UserService {
func loadUser()
func saveUser()
func deleteUser()
func logAnalytics()
}
Класс, которому нужно только loadUser, вынужден реализовывать лишние методы.
protocol UserLoader {
func loadUser()
}
protocol UserSaver {
func saveUser()
}
Теперь каждый класс реализует только нужную ответственность.
дробление протоколов для View
отдельные delegate-протоколы под разные сценарии
упрощение моков в тестах
ISP особенно важен при активном использовании протоколов. Если протокол становится слишком большим, это сигнал к его разделению.