La Capa Anti-Corrupción (ACL) es un patrón arquitectónico que se aplica para proteger el modelo de dominio interno de una aplicación de la influencia de sistemas externos durante la integración.
¿Para qué sirve?: Cuando su sistema interactúa con otros (por ejemplo, hereda datos y lógica de negocio de software obsoleto o servicios externos), el contrato externo puede cambiar o contener distorsiones. ACL permite aislar el modelo interno de cambios que son incompatibles con su lógica de negocio.
¿Cómo implementar?: Se introducen componentes adicionales: adaptadores y fachadas, que transforman los datos/interfaces externas en objetos internos. Estos pueden ser servicios, mapeadores, clases DTO especiales.
Ejemplo en Python:
class ExternalOrder: def __init__(self, order_id, amount, created_at): self.order_id = order_id self.amount = amount self.created_at = created_at class InternalOrder: def __init__(self, id, total, timestamp): self.id = id self.total = total self.timestamp = timestamp class OrderAdapter: @staticmethod def from_external(external_order): return InternalOrder( id=external_order.order_id, total=external_order.amount, timestamp=external_order.created_at )
Aquí, OrderAdapter aísla el sistema interno de los cambios en la estructura del pedido externo.
Características clave:
¿Se puede simplemente usar una capa de mapeadores POJO/DTO en lugar de un ACL completo?
No, los mapeadores simples no protegen la lógica de negocio y no son adaptadores en su totalidad. ACL es una capa integral que realiza una integración protegida, incluyendo la transformación contextual de comandos, eventos y errores de negocio.
¿Cuántos niveles de transformación se pueden utilizar en ACL?
Tantos como sean necesarios para garantizar un aislamiento completo. Normalmente, esto es un mínimo de dos: transformación de la estructura y mapeo de la lógica de negocio (por ejemplo, estados, códigos de error y políticas de acceso).
¿Cómo manejar correctamente los errores de sistemas externos en ACL?
ACL debe interceptar y adaptar los errores externos a clases de excepción internas o códigos de estado. Nunca pase directamente los errores de sistemas externos a su aplicación.