Net-Base Журнал

07.06.2026

C# и Delphi в единой архитектуре: прагматичная интеграция вместо дилеммы «или — или»

Многие компании эксплуатируют исторически сложившиеся Delphi-настольные приложения и параллельно создают новые C#-сервисы и порталы. В статье показано, как C# и Delphi в единой архитектуре корректно взаимодействуют: через четкие слои, стабильные интерфейсы, общие...

07.06.2026

От темы в журнале к проектной практике

Соответствующие страницы услуг и технологий к статье

Во многих IT-отделах исходная ситуация схожа: стабильное, процессно-ориентированное Delphi-десктопное приложение поддерживает критические процессы, тогда как новые требования тянутся в сторону веба, порталов, мобильного использования и интеграции с облачными сервисами. Одновременно C# в многих компаниях уже стал стандартом в вопросах сервисов, веб-API и интеграции идентификаций. Центральный вопрос уже не «Delphi или C#?», а: как комбинировать C# и Delphi в общей архитектуре так, чтобы эксплуатация, сопровождение, хранение данных и безопасность оставались контролируемыми.

Этот материал описывает практичные архитектурные принципы, зарекомендовавшие себя в корпоративной среде, где не всё можно или нужно строить заново. Фокус на чётком распределении ответственности между десктоп-клиентом, сервисами, данными и интерфейсами — и на том, как планировать шаги модернизации с минимальными рисками, не подвергая опасности текущие процессы.

Почему смешанные стеки в компаниях — это норма

Эволюционировавшие цифровые корпоративные решения редко создаются «с нуля». Delphi-приложения часто развивались годами, близко к бизнес-процессам, с обширной логикой данных и глубокими знаниями о частных случаях. Параллельно появились новые требования: порталы самообслуживания, автоматизированный обмен данными, подключение DMS/CRM/ERP, мульти-тенантность, повышенные требования к аудиту или единый вход (Single Sign-on).

C# в этом контексте часто даёт преимущества для веб- и сервис-экосистем: широкий спектр хостинга, стандартизованная middleware, хорошая интеграция с провайдерами идентификации и устоявшиеся паттерны для веб-API. Delphi остаётся сильной, когда речь идёт о производительных Windows-десктоп-клиентах, долгосрочно поддерживаемых VCL-приложениях или специфичных мультиплатформенных клиентах (например, через FMX).

Смешение поэтому не «частный случай», а реалистичный ответ на сохранение инвестиций и давление модернизации. Важно, чтобы совместная эксплуатация не превратилась в постоянную стройку.

Принцип архитектуры: чёткие слои вместо языковых границ

Когда встречаются два языка, возникает соблазн организовать разделение по технологии («всё, что на Delphi, — legacy, а всё на C# — новое»). Технически это часто работает в краткосрочной перспективе, но в долгосрочной приводит к трениям: дублирование бизнес-правил, неясные зоны ответственности и трудно воспроизводимые ошибки.

Опыт показывает, что лучше применять предметную слойную архитектуру, часто реализуемую как Layer-3 архитектура: презентация (UI), домен (бизнес-логика) и инфраструктура (доступ к данным, внешние системы). Суть не в учебной модели, а в конкретном эффекте в повседневной работе: решения о данных, валидациях и рабочих процессах принимаются в одном месте и предоставляются через стабильные интерфейсы.

В смешанной архитектуре это на практике означает: Delphi может по-прежнему обеспечивать UI-часть (или отдельные рабочие процессы), в то время как C# Services инкапсулируют предметный домен — или наоборот. Важно, чтобы граница между слоями была технически чистой и тестируемой.

C# и Delphi в единой архитектуре: три зарекомендовавших себя паттерна интеграции

Для интеграции Delphi и C# нет «единственно верного» подхода. Хорошие решения ориентируются на эксплуатацию, требования по безопасности, задержки, объёмы данных и циклы релизов. На практике сложились три типичных шаблона.

1) Сервисная ориентация через HTTP/REST как стандартная схема интеграции

Чаще всего наиболее устойчивой для эксплуатации и эволюции оказывается интеграция через REST-APIs (HTTP-ориентированные интерфейсы). Клиенты Delphi вызывают сервисы C# или Delphi; порталы C# используют те же конечные точки. Такая декупляция делает релизы более предсказуемыми: обновление клиента не обязательно, если API остаётся обратно совместимым.

Ключевым при этом является профессиональная настройка: таймауты, повторные попытки, идемпотентность (повторяемые запросы без побочных эффектов), чёткие коды ошибок и стратегия версионирования. Для администрирования и эксплуатации также важны: единые логи, прослеживаемые идентификаторы запросов и хорошо измеримые времена ответа.

2) Совместная база данных: только при чётких правилах

Совместный доступ к базе данных со стороны Delphi и C# кажется привлекательным, поскольку на старте он быстрый. В долгосрочной перспективе это рискованно, если обе среды напрямую пишут в одни и те же таблицы. Причина: бизнес-правила смещаются в триггеры, хранимые процедуры или «куда‑то в клиент», что усложняет анализ ошибок и проведение аудитов.

Если общая база данных неизбежна (например, на переходных этапах), помогают чёткие правила:

  • Централизовать операции записи: одна система является «System of Record» для определённых сущностей.
  • Определять контракты: Views или API как стабильный слой чтения вместо прямого доступа к таблицам.
  • Планировать окна миграций: изменения в базе данных всегда разворачивать обратно совместимо (например, новые столбцы сначала делать опциональными).

Технически база данных в этом случае выступает как инфраструктурный компонент, а не как интеграционная шина.

3) Messaging/Events для асинхронных процессов

Для разомкнутых процессов (например, импорты, уведомления, постобработка, интерфейсные задания) целесообразна асинхронная модель: одна система публикует события, другая их обрабатывает. Это снижает прямые зависимости и сглаживает пики нагрузки.

Для руководства ИТ и администраторов важно: мониторинг (длины очередей), механизмы Dead-Letter (неудачные сообщения), поведение при повторном запуске и чёткая идемпотентность на уровне предметной области. События не заменяют корректное управление мастер-данными, но являются хорошим инструментом для устойчивых цепочек процессов.

Договоры о данных и совместимость: недооценённое ядро

Независимо от выбранной схемы интеграции, стабильность определяется качеством договоров о данных. Договор о данных — это обязательное описание полей, типов, обязательности/опциональности и семантики. В REST-API это обычно JSON; важно при этом не «сам по себе JSON», а дисциплина в управлении изменениями.

Проверенные правила, которые заметно упрощают эксплуатацию:

  • Расширять, а не ломать: добавлять новые поля, при этом сначала продолжать отдавать старые.
  • Документировать семантику полей: не только «string», но, например, формат ISO‑даты, часовой пояс, допустимые состояния.
  • Толерантно обрабатывать значения enum: клиенты должны выдерживать неизвестные значения (совместимость с будущими версиями).
  • Осознанно применять версионирование API: не каждый релиз требует новой версии; изменения, нарушающие совместимость, должны быть однозначно инкапсулированы.

Эти положения особенно важны, когда десктопные клиенты Delphi не могут обновляться так часто, как веб‑сервисы.

Аутентификация и авторизация: единая модель безопасности

Смешанные архитектуры редко терпят неудачу из‑за «техники», чаще — из‑за несогласованной безопасности. Для бизнеса важно: кто имеет право на что? Как это проверяется? Как осуществляется аудит? Единая модель предотвращает дублирование управления пользователями и противоречивые роли.

На практике это ведёт к центральному слою идентификации: например через SAML 2.0 (федеративный Single Sign-on, часто в корпоративной среде) или OpenID Connect (на базе OAuth2, часто для современных веб‑API). C#-сервисы обычно можно напрямую подключать к Identity Provider; Delphi-клиенты могут получать токены и посылать их при API‑вызовах. Важно, чтобы и настольные приложения не получали «особых прав» через прямой доступ к базе данных.

Для администраторов в центре внимания:

  • Время жизни токенов и стратегия обновления (чтобы клиенты работали стабильно и при этом оставались безопасными)
  • Аутентификация сервис‑к‑сервису для внутренней коммуникации (например mTLS или подписанные токены)
  • Принцип наименьших привилегий: роли и права не должны быть заданы слишком грубо
  • Журналы аудита: протоколирование действий, важных для безопасности, с возможностью последующей проверки

Операционные концепции: Windows- и Linux-Services, IIS и повседневные процессы

Архитектура годна для использования в компании только если её можно эксплуатировать: обновления планируемы, ошибки локализуемы, нагрузка контролируема. В смешанных ландшафтах наиболее распространённые варианты эксплуатации:

  • Windows- и Linux-Services: подходят для фоновых задач, интеграционных прогонов, worker‑процессов; хорошо интегрируются в классические модели эксплуатации серверов Windows.
  • Windows- и Linux-Services/Daemon: разумный выбор для контейнеризованных или VM‑базированных эксплуатационных моделей; часто стабильны в длительной работе, хорошая автоматизация через systemd.
  • Microsoft IIS: проверенное хостинг‑решение для веб‑приложений и сценариев reverse‑proxy в средах, ориентированных на Windows.

Важно, чтобы Delphi- и C#-компоненты соответствовали схожим операционным стандартам: согласованные health‑эндпойнты (проверки состояния), определённые таймауты, ограниченное потребление ресурсов, а также чётко описанная процедура деплоя и отката. Это снижает количество «технологически специфичных» исключений в эксплуатации.

Логирование, трассировка и метрики: общий уровень наблюдаемости

Особенно при двух технологических стеках сквозные цепочки диагностики критичны. Типичная проблема: Delphi‑клиент сообщает «ошибка при сохранении», C#‑сервис фиксирует таймаут, база данных сообщает о блокировках — и между этими событиями отсутствует общий контекст.

На практике зарекомендовали себя следующие подходы:

  • Идентификаторы корреляции для каждого запроса (Client → API → DB), чтобы логи можно было сшить в одну цепочку.
  • Структурированное логирование (ключ/значение вместо плоских текстовых строк) для последующей фильтрации и анализа.
  • Метрики по задержкам, частоте ошибок, длинам очередей и использованию ресурсов.
  • Классификация ошибок: разделение бизнес‑ошибок (валидация) и технических ошибок (таймаут, сеть).

Эти основы на практике экономят больше времени, чем любые дискуссии о «правильном языке».

Доступ к данным и миграция: BDE-замена, FireDAC и современные СУБД

В Delphi-окружениях исторически большое значение имеет доступ к данным. Где ещё используются устаревшие пути доступа, например Borland Database Engine (BDE), возникает дополнительное давление: обновления ОС, переходы на 64‑бит, доступность драйверов, требования безопасности. BDE-замена в таком случае — это не только модернизация, но и снижение рисков.

Типичный путь — переход на BDE-замена с нативным подключением (современный уровень доступа к данным в Delphi), в сочетании с СУБД, удобной в эксплуатации (например PostgreSQL, SQL Server, MariaDB). Для совместной Delphi/C#-архитектуры важны два аспекта:

  • Границы транзакций: кто инициирует и фиксирует транзакции, и как регулируются параллельные операции записи?
  • Стратегия блокировок и изоляции: чтобы десктопные рабочие процессы и сервисы не блокировали друг друга.

При миграциях оправдан поэтапный план: сначала модернизировать драйвера и слой доступа, затем консолидировать модель данных, после — стабилизировать интеграционные интерфейсы. Так источники ошибок становятся изолируемыми, а откаты — реалистичными.

Release-Management: согласование разных циклов обновления

Постоянным напряжением остаётся частота обновлений: веб‑сервисы можно выкатывать чаще, десктоп‑клиенты — значительно реже (окна развертывания, коммуникация с пользователями, упаковка). Общая архитектура должна учитывать эту асимметрию.

Практические последствия:

  • Обратная совместимость API — обязательна, а не опция.
  • Feature Flags (функциональные переключатели) позволяют контролируемо включать новые функции на стороне сервера.
  • Миграции схем должны выполняться поэтапно: сначала расширить базу данных, затем сервис начинает использовать новые возможности, затем обновляется клиент.
  • Чёткая политика устаревания: старые эндпоинты или поля удалять только после определённого периода.

Особенно в регулируемых средах важно закрепить эти правила в письменном виде как архитектурные ограждения, чтобы решения не приходилось каждый раз изобретать заново в рамках проекта.

Типичные подводные камни и как их системно избегать

С точки зрения эксплуатации наиболее частые проблемы в смешанных Delphi/C#-ландшафтах хорошо предсказуемы. Если их адресовать на ранней стадии, долгосрочные затраты заметно снижаются.

Подводный камень 1: дублирование бизнес‑логики

Если Delphi-клиент и C#-сервис реализуют одни и те же правила по‑разному, появляются «призрачные ошибки»: процесс работает в UI, но падает при импорте через API. Противодействие: централизовать правила в доменном слое (сервис) или чётко распределить их по функциям, включая однозначные ответы валидации.

Подводный камень 2: обходы в UI вместо чистых интерфейсов

«Быстро записать поле в базу» может выглядеть безвредно в одном случае, но формирует теневые интерфейсы без логирования, аутентификации и версионирования. Лучше: последовательно работать через определённые эндпоинты, даже если это требует большей дисциплины вначале.

Подводный камень 3: неясные зоны ответственности в эксплуатации

Если не ясно, какая команда отвечает за какой сервис, какой лог и какие параметры эксплуатации, поиск ошибок превращается в пинг-понг. Практически полезна карта сервисов (какой сервис, какие зависимости, какие порты, какие внутренние SLA) и единые runbooks для типовых сбоев.

Подводный камень 4: отсутствие согласованности в безопасности

Портал с SSO, но десктоп-клиент с локальными аккаунтами администратора — в ряде аудитов это вызывает проблемы. Единая модель идентификации и ролей снижает риски и нагрузку на поддержку.

Помощь в принятии решения: что остаётся в Delphi, что переводится в C#?

Разумное распределение зависит меньше от идеологии и больше от близости к процессам и эксплуатационных требований. В качестве ориентира с точки зрения архитектуры и эксплуатации:

  • Delphi часто подходит для: существующих Windows-десктоп-клиентов (VCL), высокоотзывчивых UI-воркфлоу, сценариев, близких к офлайну, долгосрочного сопровождения унаследованных интерфейсов.
  • C# часто подходит для: центральных REST-API, интеграционных сервисов к ERP/DMS/CRM, компонентов, близких к Identity, порталов и бэкенд-процессов с высокой частотой изменений.
  • Принимая решение сознательно: логика данных и валидация не должны находиться «в клиенте», если существует несколько фронтендов (десктоп, портал, импортные задания).

Важно: цель не «всё в C#», а надёжная общая архитектура, в которой шаги модернизации планируемы и бизнес-процессы работают стабильно.

Путь модернизации: поэтапно — от приложения к системе

На практике общая архитектура часто является переходным этапом, но длительным. Реалистичный путь модернизации избегает крупных проектов с высоким риском и опирается на измеримые промежуточные цели:

  1. Стабилизировать интерфейсы: внедрить REST-API как предметную границу, даже если внутри ещё не всё «красиво».
  2. Модернизировать доступ к данным: BDE-замена, драйверы, поддержка 64‑бит, чёткие транзакции.
  3. Централизовать Identity: SSO и модель ролей для всех путей доступа.
  4. Унифицировать эксплуатацию: Logging/Monitoring/Health, чёткие деплои, воспроизводимые окружения.
  5. Декомпоновать предметные модули: особо изменчивые части переносить в сервисы, поэтапно упрощать UI.

Этот порядок не догматичен, но обычно минимизирует зависимости: без стабильных интерфейсов и концепции эксплуатации любые дальнейшие изменения становятся дороже.

Вывод: интеграция — это архитектурная задача, а не вопрос языков

Надёжная комбинация из Delphi и C# не возникает за счёт «мостовых библиотек», а благодаря чётким предметным границам, чистым договорённостям по данным и эксплуатации, которая серьёзно относится к мониторингу, безопасности и управлению релизами. Когда C# и Delphi в общей архитектуре сознательно взаимодействуют в рамках распределения ответственности, компании получают в первую очередь одно: модернизацию без разрыва процессов. Delphi может и дальше надёжно поддерживать стабильные десктоп-воркфлоу, тогда как C#-сервисы предоставляют интеграцию, веб-API и порталы как центральные платформенные функции.

Если вы хотите поэтапно модернизировать существующую Delphi-ландшафт или корректно подключить C#-сервисы, архитектурный ревью с фокусом на интерфейсы, данные, эксплуатацию и безопасность — самый быстрый путь к обоснованным решениям. Подробнее в прямом диалоге:

В предметной области также важную роль играют Delphi модернизация и REST-API для существующего программного обеспечения, когда интеграции, потоки данных и дальнейшая разработка должны слаженно взаимодействовать.

Обсудить проект или задачу по модернизации с Net-Base.

Следующий шаг

Если из темы становится реальный проект, архитектуру, существующее состояние и эксплуатацию следует рассматривать совместно на ранней стадии.

Мы поддерживаем не только при отдельных вопросах, но и тогда, когда из фрагментов исходного кода, унаследованных проблем или идей портала должен сформироваться надёжный корпоративный проект.

  • Текущее состояние, целевое состояние и технические риски оцениваются совместно.
  • REST, доступ к данным, порталы и развертывание не переносятся на более поздние этапы.
  • Вы заранее видите, какой путь экономически и операционно жизнеспособен.

Поделиться записью

Поделиться этой записью напрямую

LinkedIn, X, XING, Facebook, WhatsApp и электронная почта доступны немедленно. Для Instagram мы готовим ссылку и краткий текст.

Электронная почта

Instagram открывается в новой вкладке. Ссылка и короткий текст предварительно копируются в буфер обмена.