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.