2.1Kпросмотров
34.0%от подписчиков
26 февраля 2026 г.
questionScore: 2.3K
Что такое Anti-Corruption Layer (ACL)? В прошлом году, после выступления, ко мне подошла девушка, лид аналитиков, и спросила: как угнаться за тем, чтобы знать про все технологии? Я ей ответил, что всё знать смысла никакого нет и это просто нереально. Ведь одним из ключевых навыков СА я считаю - работа в неизвестности и в том, что надо быстро суметь вникнуть в моменте. Так вот Недавно общался с коллегой, который работает в гос банке и он меня спросил, знаю ли я что-то про Anti-Corruption Layer. Я, честно говоря, задумался и понял, что именно такого термина не встречал ни на одном из своих проектов, но в ходе обсуждения и наводящих вопросов стало понятно, что в целом-то концепция понятна, но не до конца. Поэтому я решил после этого диалога покопать и подумал, что вам эта тема тоже будет интересна. ➖➖➖ Что это за слой такой? Это дополнительная прослойка между нашим сервисом и внешней легаси системой и ее основная задача - это фильтрация хрени и конвертация модели внешней легаси системы в нормальную модель вашей доменки. Обычно они используются, чтобы не допускать: ✔️ внешние DTO поля, ✔️ чужеродную статусную модель, ✔️ кривые ошибки. ➖➖➖ Что должно располагаться на этом слое? ✔️ Адаптеры или Фасады, как угодно их назовите. Это некий интерфейс к которому вы подключаетесь, чтобы получать инфо, а этот адаптер интегрируется с внешним миром. ✔️ Мапперы или Переводчики, которые получают на вход контракт и перемапливают его на ваши красивые доменные параметры. При этом это может быть один сервис, а может быть несколько под каждые нужды, а может быть отдельной общей библиотекой с правилами или какие-то модули в прилке. Например, забираете данные для документа - это document-adapter, забираете инфо по пользователю, это account-adapter и так далее. Звучит бррр, как сложно, правда? Поэтому давайте на примере. Классичейский подход 3-х звенной архитектуры такой: У вас есть клиент - микросервис - внешняя система из которой вы забираете данные. Какие тут плюсы? Все прозрачно. Мало точек разрыва и при этом сам сервис перемапливает данные. Если вам потребуется забирать данные из этих же внешних систем в другом сервисе, то вам сново надо делать интеграцию с ними и при этом маппинг по контрактам может быть по разному реализован и при увеличении таких взаимодействий начинается бардак. Вот чтобы этого не было и делают отдельный адаптер. Схема такая: Клиент - Микросервис - Адаптер - Внешние системы. Получается мы замыкаем в нашем контуре контракт на адаптере и если вам нужно добавить еще сервис и интеграцию, то вам не надо выдумывать колесо. Вы просто интегрируетесь с Adapter по понятным и единым для всех правилам. У вас понятные тайм-ауты, ретрайи и все, что с этим связано. Вот такие дела, ребятушки. Кстати, хотите прикол? Я с этим уже полтора года работаю, просто не знал, что это называется Anti-Corruption Layer 😂