intermediate
Interfaces и contracts
Определяйте behavior, нужный client, держите contracts small и позволяйте implementations меняться без утечки concrete dependencies.
Интерфейс задаёт поведенческий контракт — операции, preconditions, postconditions, семантику ошибок — без диктата реализации. Мелкие role-specific интерфейсы (ISP) дают клиенту только `Readable` или `Writable`, а не всё в одном `Storage`.
Контракты позволяют тестировать с fakes и менять инфраструктуру без переписывания domain.
На интервью: разделите жирный interface на два по ролям и влияние на mocks и production adapters.
Типовые ошибки: утечка DTO одного слоя; boolean flag methods вместо отдельных типов; контракт настолько большой, что каждый mock мучителен.
Компромисс — больше типов против ясных границ и безопасных рефакторингов.
Чеклист:
- Размер interface под роль клиента.
- Failure modes в контракте.
- Domain против interfaces, не vendors.