Adapter — приведение несовместимых интерфейсов к единому формату
Adapter позволяет двум несовместимым интерфейсам работать вместе, обеспечивая преобразование вызовов, данных и структур. Он действует как «переводчик» между компонентами системы, не изменяя исходного кода сторон.
Паттерн широко применяется при интеграции legacy, внешних API, библиотек, драйверов, а также при переходе на новую архитектуру или стандартизацию внутренних интерфейсов.
Adapter снижает связанность, упрощает интеграцию, позволяет повторно использовать существующие компоненты и поддерживает эволюцию архитектуры.
Adapter — это один из фундаментальных архитектурных механизмов, который помогает интегрировать разные части системы независимо от их форматов, структур и способов работы. В отличие от Facade (который скрывает сложность подсистемы), Adapter решает конкретную проблему несовместимости интерфейсов.
Идея Adapter
Adapter превращает:
-
формат данных А → формат данных B
-
вызов метода X → вызов метода Y
-
протокол взаимодействия старой системы → контракт современной системы
Клиент работает с адаптером так, будто это нативный компонент, а адаптер сам делает необходимую трансформацию.
Где применяется Adapter
Применений настолько много, что без него невозможно проектировать современные ИС.
1. Интеграция с legacy-системами
Любая устаревшая система:
-
имеет свои форматы;
-
свои протоколы;
-
специфический порядок вызовов;
-
нестандартные ошибки.
Adapter позволяет «подключить» legacy к современной архитектуре, не вмешиваясь в старый код.
2. Интеграция внешних API
Внешние сервисы ничем не обязаны следовать нашим контрактам.
Adapter преобразует:
-
имена полей;
-
структуры JSON/XML;
-
форматы дат;
-
протоколы ошибок;
-
идентификаторы.
Это ключ к устойчивой интеграции.
3. Микросервисная архитектура
Даже внутри одной компании микросервисы часто имеют разные:
-
версии API;
-
форматы событий;
-
ключи идентификации;
-
контракты взаимодействия.
Adapter помогает выровнять различия, сохранив независимость сервисов.
4. Переход на новую архитектуру
Когда система мигрирует:
-
монолит → микросервисы
-
SOA → EDA
-
REST → gRPC
-
SOAP → REST
Adapter обеспечивает совместимость и уменьшает стоимость миграции.
5. Работа с разными библиотеками и драйверами
Adapter часто используется при работе:
-
с БД-библиотеками,
-
с файловыми API,
-
с системами очередей,
-
с брокерами событий.
Он стандартизирует интерфейс для внутреннего кода.
Types of Adapters
Class Adapter
Через наследование (редко используется в языках без множественного наследования).
Object Adapter
Через композицию — наиболее распространён.
Клиент вызывает методы адаптера, а адаптер вызывает методы реального объекта с преобразованием данных.
Преимущества Adapter
-
возможность использовать несовместимые системы;
-
изоляция клиентского кода от изменений внешних API;
-
единые стандарты данных и контрактов;
-
снижение технического долга;
-
поддержка переиспользования существующих компонент.
Недостатки
-
может усложнить архитектуру при большом количестве адаптеров;
-
риск дублирования логики трансформации;
-
при неправильном проектировании может стать «бутылочным горлышком».
Архитектор должен стандартизировать правила трансформации.
Adapter в учебниках
Adapter описывается в темах:-
интеграции подсистем,
-
проектирования API,
-
компонентных архитектур,
-
адаптации внешних систем,
-
системного посредничества.
Особо подчёркивается его роль в SOA и корпоративной интеграции.
Почему архитектор обязан знать Adapter
Потому что:
-
архитектуры никогда не бывают однородными;
-
старые системы всегда нужно подключать;
-
внешние сервисы всегда имеют несовместимый контракт;
-
стандартизация интерфейсов — основа эволюции систем;
-
миграции без адаптеров невозможны.
Adapter — это один из пяти наиболее важных архитектурных паттернов интеграции.