Net-Base Revista

07.06.2026

C# y Delphi en una arquitectura común: integración pragmática en lugar de «o esto o aquello».

Muchas empresas mantienen aplicaciones de escritorio Delphi consolidadas y, en paralelo, desarrollan nuevos servicios y portales C#. El artículo muestra cómo C# y Delphi cooperan de forma ordenada en una arquitectura común: mediante capas definidas, interfaces estables, componentes compartidos...

07.06.2026

Del tema de la revista a la práctica del proyecto

Páginas de servicios y técnicas relacionadas

En muchas áreas de TI la situación de partida es similar: una aplicación de escritorio estable y cercana al proceso Delphi soporta procesos críticos, mientras que nuevas demandas empujan hacia la web, portales, uso móvil e integración con servicios en la nube. Al mismo tiempo, C# está implantado en muchas empresas cuando se trata de servicios, Web-APIs e integración de identidades. La cuestión central ya no es „Delphi o C#?“, sino: cómo combinar C# y Delphi en una arquitectura común de forma que la operación, el mantenimiento, la gestión de datos y la seguridad sigan siendo controlables.

Este artículo describe principios arquitectónicos prácticos que funcionan en entornos empresariales donde no todo puede o debe reconstruirse desde cero. El foco está en responsabilidades claras entre cliente de escritorio, servicios, datos e interfaces, y en cómo planificar pasos de modernización con bajo riesgo sin poner en peligro los procesos en marcha.

Por qué las pilas mixtas son habituales en las empresas

Las soluciones digitales empresariales desarrolladas con el tiempo raramente nacen en un entorno vacío. Las aplicaciones Delphi se han ampliado a menudo durante muchos años, cerca de los procesos de negocio, con lógica de datos extensa y profundo conocimiento de casos especiales. Paralelamente han surgido nuevas demandas: portales de autoservicio, intercambios de datos automatizados, conexión a DMS/CRM/ERP, multitenancy, mayor capacidad de auditoría o Single Sign-on.

En este contexto, C# suele aportar ventajas en ecosistemas web y de servicios: amplio espectro de hosting, middleware estandarizado, buena integración con proveedores de identidad y patrones consolidados para Web-APIs. Delphi sigue siendo fuerte cuando se trata de clientes de escritorio Windows de alto rendimiento, aplicaciones VCL mantenidas a largo plazo o clientes multiplataforma específicos (p. ej. vía FMX).

Por eso la combinación no es un «caso excepcional», sino una respuesta realista a la protección de la inversión y a la presión por modernizar. Lo decisivo es que la operación conjunta no se convierta en una obra en curso permanente.

Principio arquitectónico: capas claras en lugar de límites por lenguaje

Cuando confluyen dos lenguajes, existe la fuerte tentación de organizar la separación según la tecnología («todo lo que es Delphi es legacy, todo lo que es C# es nuevo»). Técnicamente eso puede funcionar a corto plazo, pero a largo plazo genera fricciones: reglas de negocio duplicadas, responsabilidades poco claras y errores difíciles de reproducir.

En su lugar se ha mostrado efectivo un estratificado por responsabilidad, con frecuencia implementado como una arquitectura Layer-3: presentación (UI), dominio (lógica de negocio) e infraestructura (acceso a datos, sistemas externos). El punto no es tanto el modelo de libro de texto, sino el efecto concreto en el día a día: las decisiones sobre datos, validaciones y flujos se toman en un único lugar y se exponen a través de interfaces estables.

En una arquitectura mixta esto significa en la práctica: Delphi puede seguir aportando una parte de UI (o determinados flujos), mientras que los servicios C# encapsulan una capa de dominio – o al revés. Lo importante es que el borde entre las capas sea técnicamente limpio y comprobable.

C# und Delphi in einer gemeinsamen Architektur: drei bewährte Integrationsmuster

Para el acoplamiento de Delphi y C# no existe „el“ único camino correcto. Las buenas decisiones se orientan por la operación, los requisitos de seguridad, la latencia, el volumen de datos y los ciclos de release. En la práctica se han consolidado tres patrones.

1) Orientación a servicios sobre HTTP/REST como acoplamiento estándar

Con frecuencia, lo más robusto para operación y evolución es un acoplamiento mediante REST-APIs (interfaces basadas en HTTP). Los clientes de Delphi llaman a servicios de C# o de Delphi; los portales de C# usan los mismos endpoints. Esta separación hace que los releases sean más previsibles: no siempre es necesario actualizar un cliente si la API mantiene compatibilidad hacia atrás.

Es importante, en este contexto, una implementación profesional: timeouts, reintentos, idempotencia (solicitudes repetibles sin efectos secundarios), códigos de error claros y una estrategia de versionado. Para administración y operación también cuenta: logs uniformes, IDs de solicitud rastreables y tiempos de respuesta bien medibles.

2) Base de datos compartida: solo con reglas claras

Un acceso compartido a la base de datos por parte de Delphi y C# resulta tentador porque al principio es rápido. A largo plazo, sin embargo, es arriesgado si ambos sistemas escriben directamente en el mismo conjunto de tablas. La razón: las reglas de negocio tienden a trasladarse a triggers, procedimientos almacenados o a „algún lugar en el cliente“. Eso complica el análisis de errores y las auditorías.

Si una base de datos compartida es inevitable (p. ej., en fases de transición), ayudan reglas claras:

  • Centralizar los accesos de escritura: un sistema es el „System of Record“ para determinadas entidades.
  • Definir contratos: vistas o APIs como capa de lectura estable en lugar de accesos directos a tablas.
  • Planificar ventanas de migración: desplegar cambios en la base de datos siempre de forma retrocompatible (p. ej., columnas nuevas primero opcionales).

Técnicamente, la base de datos se convierte entonces en un componente de infraestructura, no en el bus de integración.

3) Mensajería/Eventos para procesos asíncronos

Para flujos desacoplados (p. ej., importaciones, notificaciones, posprocesamiento, tareas de interfaz) tiene sentido un modelo asíncrono: un sistema publica eventos y otro los procesa. Esto reduce las dependencias directas y estabiliza los picos de carga.

Para la dirección de TI y los administradores es importante: monitorización (longitud de colas), conceptos de dead-letter (mensajes fallidos), comportamiento de reinicio y una idempotencia funcional clara. Los eventos no reemplazan una gestión limpia de los datos maestros, pero son una herramienta adecuada para cadenas de proceso robustas.

Contratos de datos y compatibilidad: el núcleo subestimado

Independientemente del patrón de integración, la calidad de los contratos de datos define la estabilidad. Un contrato de datos es la descripción vinculante de campos, tipos, obligatorio/opcional y semántica. En REST-APIs esto suele ser JSON; lo importante no es „JSON en sí“, sino la disciplina en el manejo de los cambios.

Reglas probadas que facilitan claramente la operación:

  • Ampliar en lugar de romper: añadir campos nuevos y seguir suministrando los antiguos inicialmente.
  • Documentar la semántica de los campos: no solo „string“, sino p. ej. fecha ISO, zona horaria, estados permitidos.
  • Tratar los valores enum con tolerancia: los clientes deben sobrevivir a valores desconocidos (compatibilidad hacia adelante).
  • Aplicar el versionado de APIs con criterio: no cada lanzamiento necesita una nueva versión; pero los cambios incompatibles deben estar claramente encapsulados.

Estos puntos son especialmente importantes cuando Delphi-clientes de escritorio no pueden actualizarse con tanta frecuencia como los servicios web.

Autenticación y autorización: un modelo de seguridad común

Las arquitecturas mixtas rara vez fracasan por la „tecnología“; con mayor frecuencia lo hacen por una seguridad inconsistente. Para las empresas importa: ¿quién puede hacer qué? ¿Cómo se verifica? ¿Cómo se audita? Un modelo común evita la duplicación en la gestión de usuarios y roles contradictorios.

En la práctica esto conlleva una capa central de identidad: por ejemplo mediante SAML 2.0 (Single Sign-on federado, habitual en entornos empresariales) u OpenID Connect (basado en OAuth2, frecuente para APIs web modernas). C#-Services suelen poder enlazarse directamente a un Identity Provider; Delphi-Clients pueden obtener tokens y enviarlos en las llamadas a la API. Es importante que incluso las aplicaciones de escritorio no reciban „privilegios especiales“ mediante acceso directo a la base de datos.

Central para los administradores:

  • Tiempos de vida de tokens y estrategia de renovación (para que los clientes funcionen de forma estable y sigan siendo seguros)
  • Autenticación entre servicios para la comunicación interna (p. ej. mTLS o tokens firmados)
  • Principio de menor privilegio: no definir roles y permisos de forma demasiado genérica
  • Registros de auditoría: registrar de forma trazable las acciones relevantes para la seguridad

Conceptos de operación: Windows- y Linux-Services, IIS y procesos en el día a día

Una arquitectura solo es „buena“ en la empresa si es operable: actualizaciones planificables, errores localizables, carga controlable. En paisajes mixtos, las variantes de operación más comunes son:

  • Windows- y Linux-Services: adecuados para tareas en segundo plano, procesos de integración y workers; bien integrables en modelos operativos de servidores Windows.
  • Windows- y Linux-Services/Daemon: recomendable para modelos operativos basados en contenedores o máquinas virtuales; suelen ser estables en funcionamiento continuo y permiten buena automatización mediante systemd.
  • Microsoft IIS: hosting consolidado para aplicaciones web y escenarios de reverse proxy en entornos centrados en Windows.

Es importante que los componentes Delphi y C# cumplan estándares operativos similares: endpoints de salud (señales de vida) consistentes, timeouts definidos, consumo de recursos limitado, así como un procedimiento claro de despliegue y rollback. Esto reduce los tratamientos especiales „específicos de la tecnología“.

Logging, tracing y métricas: un nivel común de observabilidad

Especialmente con dos stacks tecnológicos, las cadenas de diagnóstico continuas son decisivas. Un problema típico: el Delphi-client informa „error al guardar“, el C#-service tiene un timeout, la base de datos muestra locks — sin una relación común.

Prácticas consolidadas son:

  • IDs de correlación por petición (Client → API → DB), para poder consolidar los registros.
  • Logging estructurado (clave/valor en lugar de líneas de texto), para facilitar el filtrado posterior.
  • Métricas de latencia, tasas de error, longitudes de cola y uso de recursos.
  • Clasificación de errores: separar errores de negocio (validación) de errores técnicos (timeout, red).

Estos fundamentos ahorran en la práctica más tiempo que cualquier discusión sobre “el idioma correcto”.

Acceso a datos y migración: sustitución de BDE, FireDAC y bases de datos modernas

En entornos Delphi el acceso a datos históricamente juega un papel importante. Donde todavía se emplean vías de acceso antiguas como la Borland Database Engine (BDE), surge presión adicional: actualizaciones del sistema operativo, migraciones a 64 bits, disponibilidad de drivers, requisitos de seguridad. Una sustitución de BDE no es entonces solo modernización, sino reducción de riesgo.

Lo habitual es la transición a una sustitución de BDE con conexión nativa (capa de acceso a datos moderna en Delphi), combinada con una base de datos manejable operativamente (p. ej. PostgreSQL, SQL Server, MariaDB). Para una arquitectura conjunta Delphi/C# son importantes dos aspectos:

  • Límites de transacción: ¿quién inicia/confirmar (commit) las transacciones y cómo se regulan los accesos de escritura en paralelo?
  • Estrategia de bloqueo y aislamiento: para que los flujos de trabajo de escritorio y los servicios no se bloqueen entre sí.

En migraciones se demuestra útil una planificación por fases: primero modernizar los drivers y la capa de acceso, luego consolidar el modelo de datos y, finalmente, estabilizar las interfaces de integración. Así las fuentes de error se vuelven aislables y los rollbacks realistas.

Gestión de releases: conciliar ciclos de actualización diferentes

Un campo de tensión recurrente es la frecuencia de actualizaciones: los servicios web pueden desplegarse con mayor frecuencia, los clientes de escritorio a menudo con menos frecuencia (ventanas de rollout, comunicación con usuarios, empaquetado). Una arquitectura común debe considerar esta asimetría.

Consecuencias prácticas:

  • Compatibilidad hacia atrás de la API es obligación, no opción.
  • Feature flags (conmutadores funcionales) ayudan a activar nuevas funciones del lado del servidor de forma controlada.
  • Las migraciones de esquema deben realizarse por fases: primero ampliar la base de datos, luego permitir que el servicio la utilice, y después actualizar el cliente.
  • Deprecación clara: eliminar endpoints o campos antiguos solo tras un periodo definido.

Especialmente en entornos regulados es importante fijar estas reglas por escrito como directrices arquitectónicas, para que las decisiones no se reinventen por proyecto.

Problemas típicos y cómo evitarlos de forma sistemática

Desde la perspectiva de operación, los problemas más frecuentes en paisajes mixtos Delphi/C# son previsibles. Si se abordan pronto, los costes a largo plazo disminuyen notablemente.

Punto de tropiezo 1: lógica de negocio duplicada

Si el cliente Delphi y el servicio C# implementan las mismas reglas de forma distinta, surgen “errores fantasma”: un proceso funciona en la UI, pero falla al importar por API. Contramedida: centralizar las reglas en la capa de dominio (servicio) o asignarlas claramente desde el punto de vista funcional, incluyendo respuestas de validación inequívocas.

Punto de tropiezo 2: workarounds en la UI en lugar de interfaces limpias

“Escribir rápidamente un campo en la base de datos” puede parecer inofensivo en un caso individual, pero genera interfaces en la sombra sin logging, autenticación ni versionado. Mejor: pasar de forma consistente por endpoints definidos, aunque inicialmente requiera más disciplina.

Punto de tropiezo 3: responsabilidades operativas poco claras

Si no está claro qué equipo es responsable de qué servicio, qué registro y qué parámetros operativos, la búsqueda de fallos termina en ping-pong. En la práctica ayuda un mapa de servicios (qué servicio, qué dependencias, qué puertos, qué SLAs internos) y runbooks estandarizados para las fallas frecuentes.

Obstáculo 4: falta de consistencia en seguridad

Un portal con SSO, pero un cliente de escritorio con cuentas de administrador locales es un problema en muchas auditorías. Un modelo común de identidad y de roles reduce el riesgo y el esfuerzo de soporte.

Ayuda para la decisión: ¿qué queda en Delphi y qué pasa a C#?

La distribución sensata depende menos de la ideología que de la cercanía al proceso y de los requisitos operativos. Como orientación desde la perspectiva de arquitectura y operación:

  • Delphi suele ser adecuado para: clientes de escritorio existentes Windows (VCL), flujos de UI de muy alta reactividad, escenarios con operación offline, mantenimiento a largo plazo de interfaces existentes.
  • C# suele ser adecuado para: APIs centrales REST, servicios de integración hacia ERP/DMS/CRM, componentes relacionados con la identidad, portales y procesos backend con alta frecuencia de cambios.
  • Decidir conscientemente: la lógica de datos y la validación no deberían residir „en el cliente“ cuando existen varios frontends (desktop, portal, trabajos de importación).

Importante: El objetivo no es „todo a C#“, sino una arquitectura global robusta en la que los pasos de modernización sean planificables y los procesos empresariales funcionen de forma estable.

Ruta de modernización: paso a paso de la aplicación al sistema

En la práctica, una arquitectura común suele ser una transición, pero prolongada. Una ruta de modernización realista evita grandes proyectos de alto riesgo y apuesta por hitos intermedios medibles:

  1. Estabilizar interfaces: introducir la API REST como límite funcional, incluso si internamente no todo está todavía „bonito“.
  2. Modernizar el acceso a datos: BDE-sustitución, controladores, compatibilidad de 64 bits, transacciones claras.
  3. Centralizar la identidad: SSO y modelo de roles para todas las vías de acceso.
  4. Unificar la operación: registro/monitorización/health, despliegues claros, entornos reproducibles.
  5. Desacoplar módulos funcionales: desplazar a servicios las partes especialmente propensas a cambios, aligerar la UI de forma gradual.

Este orden no es dogmático, pero típicamente minimiza dependencias: sin interfaces estables y un concepto de operación, cualquier cambio adicional será más caro.

Conclusión: la integración es una tarea de arquitectura, no una cuestión de lenguajes

Una combinación sólida de Delphi y C# no surge por „bibliotecas puente“, sino por límites funcionales claros, contratos de datos limpios y un concepto de operación que tome en serio la monitorización, la seguridad y la gestión de releases. Cuando C# y Delphi en una arquitectura común interactúan deliberadamente según responsabilidades, las empresas obtienen sobre todo una cosa: modernización sin ruptura de procesos. Delphi puede seguir soportando de forma fiable flujos de trabajo de escritorio estables, mientras que los servicios C# proporcionan integración, Web-APIs y portales como funciones centrales de la plataforma.

Si desea modernizar de forma gradual una infraestructura Delphi existente o integrar correctamente servicios C#, una revisión de arquitectura con foco en interfaces, datos, operación y seguridad es la vía más rápida hacia decisiones sólidas. Más al respecto en un intercambio directo:

En el entorno funcional también desempeñan un papel importante la Delphi modernización y la REST-API para software existente, cuando integraciones, flujos de datos y la evolución deben funcionar de forma ordenada.

Discutir el proyecto o la iniciativa de modernización con Net-Base.

Siguiente paso

Cuando el tema se convierte en un proyecto real, la arquitectura, los sistemas existentes y la operación deben considerarse desde el principio.

No solo apoyamos en consultas puntuales, sino también cuando, a partir de fragmentos de código fuente, temas heredados o ideas de portales, debe consolidarse un proyecto empresarial robusto.

  • La situación actual, el estado objetivo y los riesgos técnicos se evalúan conjuntamente.
  • REST, el acceso a datos, los portales y el rollout no se posponen como consecuencias tardías.
  • Detecta con antelación qué enfoque es viable desde el punto de vista económico y operativo.

Compartir entrada

Compartir esta publicación directamente

LinkedIn, X, XING, Facebook, WhatsApp y correo electrónico están disponibles de inmediato. Para Instagram preparamos el enlace y un texto breve de inmediato.

Correo electrónico

Instagram se abre en una nueva pestaña. El enlace y el texto breve se copian previamente en el portapapeles.