Адаптер (Adapter)¶
Adapter переводит неудобный или устаревший интерфейс в тот контракт, который нужен клиентскому коду.
Опора на ООП¶
Adapter в первую очередь опирается на интерфейсы и инкапсуляцию: несовместимый контракт прячется внутри адаптера, а наружу отдается ожидаемый API. Полиморфизм появляется, когда адаптер подменяет обычную реализацию по тому же контракту.
Что показывает пример на 1С¶
CommonModules.Adapterэкспортирует понятный клиенту методBeautyMethod2WTF(Parameters).- Внутри адаптер преобразует входные данные через
Convert(), вызываетLegacy.WTFMethod(Input, Output)и потом собирает ответ черезExtract(Output). - Код, который использует адаптер, не знает деталей старого контракта и не размазывает их по системе.
Пример¶
#Region Public
Function BeautyMethod2WTF(Parameters) Export
Input = Convert(Parameters);
Output = Undefined;
Legacy.WTFMethod(Input, Output);
Result = Extract(Output);
Return Result;
EndFunction
#EndRegion
#Region Private
Function Convert(Parameters)
Return Parameters;
EndFunction
Function Extract(Output)
Return Output;
EndFunction
#EndRegion
Где полезен в 1С¶
- при оборачивании старых общих модулей с неудачным API;
- при интеграции с внешними компонентами, COM или HTTP-клиентами;
- когда нужно перейти на новый интерфейс без массовой переписи прикладного кода.
Когда паттерн лишний¶
- если старый код можно безопасно переделать без слоя совместимости;
- если различия между интерфейсами минимальны;
- если адаптер начинает содержать слишком много бизнес-логики и превращается в фасад или сервис.