Привет.
Пытаюсь в голове уложить по полочкам понятия Anti-Corruption Layer. Чисто формально - не вижу никакой разницы с понятием паттерна Adapter (или Facade). Единственное отличие, которое я на данный момент вижу, это разница в определениях, что Anti Corruption Layer это некий wrapper, который позволяет изолировать ваш домен от влияния чужого домена, в то время как Adapter это тот же wrapper, но который служит для целей интеграции несовместимых частей кода/системы. Взял отсюдда:
https://softwareengineering.stackexchange.com/ques...
В другом примере вообще Anti Corruption Layer заменяют понятием Adapter:
https://medium.com/solutions-architecture-patterns...
Разберем такой пример. У меня есть библиотека, которая позволяет работать запросами к MongoDB из кода, разработанная официальными разработчиками MongoDB для моего языка программирования. Также у меня есть доменная модель юзера (так и назовем её - User). У юзера есть уникальный идентификатор UserID, который должен совпадать с идентификатором в MongoDB.
В библиотеки для MongoDB для идентификаторов используется тип `primitive.ObjectID`. Т.к. я не хочу в доменной модели ссылаться на типы в базе данных, я создаю отдельный тип `Identifier`, который, по сути, представляет собой обычную строку. Таким образом, в доменной модели UserID будет типом `Identifier`, а сам `primitive.ObjectID` во время маппинга будет конвертироваться в `Identifier` путем обычного преобразования к строке.
Вопрос: в данном случае тип `Identifier` это anti-corruption layer? Есть ли у вас примеры, которые позволяют наиболее точно показать разницу между anti-corruption layer и паттерном adapter?