Adapter Pattern: integrar sistemas sin contaminar el dominio
Cómo usar Adapter para conectar APIs, ERPs, pagos o servicios externos sin filtrar sus modelos dentro del corazón del sistema.
- #gof
- #adapter
- #integraciones
- #modernizacion
Resumen ejecutivo
- Adapter protege el dominio cuando una integración empieza a imponer su lenguaje.
- La clave es traducir contrato, errores y comportamiento, no solo esconder una API.
El problema real
Las integraciones rara vez fallan solo por HTTP. Fallan porque el modelo del proveedor entra al dominio: nombres raros, estados ajenos, errores opacos y reglas que pertenecen a otro negocio.
Cuando el resto del sistema empieza a hablar como la API externa, la integración dejó de estar aislada.
Qué resuelve Adapter
Adapter traduce una interfaz incompatible a una interfaz propia. No elimina el acoplamiento con el proveedor, pero lo concentra en un borde claro.
Ese borde permite cambiar proveedor, testear fallos y mantener el lenguaje interno estable.
Cómo se ve en código
El dominio pide verificar una cuenta. El adapter se ocupa de traducir request, response y errores del proveedor.
type AccountVerifier = {
verify(documentId: string): Promise<"approved" | "rejected">;
};
class VendorAccountAdapter implements AccountVerifier {
constructor(private readonly client: VendorClient) {}
async verify(documentId: string) {
const response = await this.client.lookup({ doc_id: documentId });
return response.status === "OK" ? "approved" : "rejected";
}
}Cuándo usarlo
Adapter es especialmente útil en modernización e integraciones:
- Un ERP o API externa tiene modelos distintos a los del dominio.
- Querés evitar que errores del proveedor se propaguen por toda la app.
- Necesitás cambiar o comparar proveedores con menor costo.
- El sistema interno debe mantener lenguaje propio y estable.
Cuándo evitarlo
Si solo hacés una llamada simple y el modelo externo no se propaga, un wrapper mínimo puede alcanzar. Adapter vale cuando hay traducción real de lenguaje, contrato o comportamiento.
Evidencia relacionada
FAQ
- ¿Adapter es solo un wrapper?
- No siempre. Un wrapper puede esconder una llamada. Un adapter traduce contrato, lenguaje y comportamiento para que el dominio no dependa del proveedor.
- ¿Dónde debería vivir un adapter?
- Normalmente en la capa de infraestructura o integración, cerca del cliente externo y lejos del modelo de dominio.