Урок 4: ISP и сфокусированные интерфейсы
Видели когда-нибудь класс, который реализует интерфейс и выбрасывает NotSupportedException в половине методов? Это боль, которую создаёт раздутый интерфейс: каждый клиент оказывается вынужден зависеть от операций, которые ему не нужны, и любое изменение интерфейса ломает несвязанные классы. В этом у
ISP — это как разбить огромное меню на несколько маленьких: тот, кто хочет только кофе, получает одну короткую страницу, а не буклет на 200 страниц.
- Принцип разделения интерфейсов (ISP)
- Клиент не должен зависеть от методов, которые не использует, — разбейте широкий интерфейс на несколько маленьких, сфокусированных ролевых интерфейсов.
- раздутый интерфейс
- Интерфейс, который вынуждает реализующих предоставлять методы, для них нерелевантные. Классический симптом: методы, которые только выбрасывают NotSupportedException.