Volver al blog
Arquitectura frontend

Migrar un legacy multi-repositorio con agentes: casos de uso antes que pantallas

Cómo descubrir el comportamiento de una aplicación de escritorio, acordar contratos y migrar casos de uso completos entre repositorios con ayuda de agentes.

Escrito por José María Santos, Tech Lead

IAagenteslegacymigración.NETVuearquitectura
Un equipo analiza una aplicación de escritorio y sus datos, define un contrato y migra un caso de uso completo hacia una interfaz web con validación de paridad.

Migrar una aplicación de escritorio a web no consiste en reemplazar cada formulario por una pantalla equivalente. En un sistema legacy, las reglas de negocio pueden vivir en la interfaz, los accesos a datos pueden llamar directamente a procedimientos almacenados y el comportamiento puede depender de varios repositorios. Generar una nueva UI rápidamente no resuelve qué hace realmente el sistema ni dónde deberían vivir sus responsabilidades.

La issue #64 del repositorio plantea una transición concreta: una aplicación de escritorio .NET, una base de datos con stored procedures, un backend .NET y un frontend Vue, organizados en repositorios independientes. El eje del artículo es migrar casos de uso completos, no mapear formularios uno a uno.

Empieza por descubrir el caso de uso

Para un caso como consultar pedidos, crear o cancelar una operación, el análisis debe seguir el recorrido actual: punto de entrada en el escritorio, reglas aplicadas, permisos, procedimientos almacenados, estados y efectos secundarios. Un analista de legacy puede recopilar evidencia; un analista de base de datos puede explicar las consultas y escrituras. Esos perfiles condensan contexto para que frontend y backend no tengan que leer cada repositorio completo.

La investigación debe distinguir comportamiento observado de comportamiento deseado. Una regla implementada en un formulario puede ser accidental o contradictoria con otra ruta. El equipo decide qué conservar, corregir o dejar fuera, y registra términos y excepciones para que los agentes no transformen código existente en una especificación incuestionable.

Encapsula responsabilidades detrás de un contrato

Una arquitectura de transición puede dirigir Vue por HTTP a un backend .NET que concentra casos de uso, validaciones y acceso a datos, mientras mantiene temporalmente los stored procedures:

Vue → API .NET → caso de uso y validaciones → stored procedure

La primera fase no necesita eliminar procedimientos almacenados por principio. Se pueden clasificar según si solo acceden a datos, combinan persistencia con lógica, contienen reglas críticas o parecen no tener consumidores conocidos. La extracción de reglas puede priorizarse después, con evidencia sobre su función y riesgo.

El contrato HTTP permite que frontend y backend avancen en paralelo una vez que se han acordado entrada, salida, errores y estados relevantes. Frontend puede simular el contrato con MSW mientras backend implementa la ruta real. La integración compara los dos recorridos y descubre divergencias antes de migrar la siguiente capacidad.

Migra en cortes verticales y comprueba paridad

Evita construir primero todas las APIs, después todas las pantallas y dejar la integración para el final. Una unidad completa —consultar pedidos o crear un pedido— atraviesa descubrimiento, contrato, backend, frontend e integración. Después de validar ese camino, puede comenzar el siguiente caso de uso.

Cuando sea viable, characterization o parity tests ejecutan el mismo input sobre el comportamiento legacy y el nuevo backend y comparan resultados. Esto resulta especialmente útil para cálculos, descuentos, impuestos, stock, estados, permisos o facturación. Una diferencia no implica automáticamente que la versión nueva esté mal: obliga a decidir si se detectó un bug antiguo o una pérdida de comportamiento intencionada.

Coordina repositorios sin mezclar todo el contexto

GitHub puede conservar issues, dependencias y contratos de trabajo; un workspace multi-root en VS Code facilita la investigación local sin convertir los repositorios en uno solo. Un repositorio de coordinación opcional puede guardar specs, glosario y ADR compartidos si el equipo necesita una fuente de verdad común.

Los agentes no tienen por qué leer todas las bases de código. El analista de legacy y el de datos pueden producir hallazgos citados y decisiones; después los implementadores trabajan con el contrato y el ticket que necesitan. Un revisor de migración puede comprobar paridad y compatibilidad entre los repositorios. Cada rol reduce el contexto requerido, pero las decisiones y los contratos siguen siendo visibles para el equipo.

El orden es descubrir, decidir, especificar, cortar por caso de uso, implementar, integrar y comparar. Los agentes pueden acelerar la exploración y ejecución; no resuelven por sí solos si una diferencia es una regla de negocio, un bug histórico o un cambio de producto. El cuello de botella continúa siendo entender y delimitar el sistema antes de reemplazarlo.