Анти-коррупционный слой (ACL) используется для предотвращения "протекания" нежелательной логики, моделей или данных между интегрируемыми системами. Этот шаблон реализует промежуточный слой переводчиков, адаптеров и фасадов, чтобы изолировать одну доменную модель от другой.
Например, при интеграции старой учетной системы с новой платформой e-commerce, ACL позволит конвертировать форматы данных, валидировать их и корректно обрабатывать бизнес-правила обеих сторон.
class LegacyUserDTO: def __init__(self, legacy_id, fname, lname): self.legacy_id = legacy_id self.fname = fname self.lname = lname class ModernUser: def __init__(self, id, first_name, last_name): self.id = id self.first_name = first_name self.last_name = last_name def acl_translate(legacy_user): return ModernUser( id=legacy_user.legacy_id, first_name=legacy_user.fname, last_name=legacy_user.lname )
Можно ли использовать сериализацию или ORM вместо антикоррупционного слоя?
Сериализация и ORM облегчают передачу и хранение данных, но не защищают доменную модель от внешних влияний. Только ACL обеспечивает изоляцию логики и соответствие бизнес-правил обеих систем.
В каких случаях ACL не нужен?
ACL обычно не нужен, если обе системы имеют идентичные или согласованные модели и контролируются одной командой. Но на практике даже малейшие различия могут привести к проблемам без ACL.
Что произойдет, если интеграция осуществляется напрямую без ACL?
Высокий риск того, что изменения в сторонней системе негативно повлияют на бизнес-логику основной системы или станут причиной багов.