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.