intermediate

Abstraction

Моделируйте только responsibilities, нужные caller, и оставляйте storage, algorithms или collaboration details за boundary.

Абстракция показывает клиенту только нужное — `PaymentGateway.charge(order)` — скрывая токенизацию, retries и SDK провайдера. Хорошие абстракции совпадают с ментальной моделью вызывающего и стабильны при смене реализации (Stripe на Adyen).

Протекающие абстракции заставляют знать внутренности; раздутые связывают несвязанные обязанности.

На интервью: интерфейс file storage для domain без утечки типов S3 наверх.

Типовые ошибки: абстракции с именами вендоров; interface, копирующий одну реализацию; преждевременная абстракция до второго use case.

Компромисс — простые call sites против неверного шва, цементирующего плохой дизайн.

Чеклист:

  • Модель потребностей вызывающего, не storage.
  • Минимальная поверхность абстракции.
  • Проверка второй реализацией или test double.