Від теми журналу до практики проєкту
Відповідні сторінки послуг і технічні сторінки до публікації
Video-Botschaft
Поєднання Delphi Desktop і веб-порталів: архітектура, інтерфейси та модернізація без розриву
Warum „Portal statt Desktop“ oft scheitert und wie ein gemeinsamer Service-Kern Desktop und Web-Portal konsistent verbindet – mit Fokus auf Betrieb, Rechte und wartbare Schnittstellen.
Video mit KI erstellt
Transkript anzeigen
Guten Tag. Der größte Fehler ist, Portal und Desktop getrennt weiterzuentwickeln.
Im Beitrag „Delphi Desktop und Web-Portale kombinieren: Architektur, Schnittstellen und Modernisierung ohne Bruch“ geht es genau darum. Viele Firmen haben eine stabile Delphi-Desktopanwendung.
Intern läuft damit alles schnell. Aber extern brauchen Kunden und Partner ein Web-Portal – ohne VPN und ohne Client-Rollout.
Wenn man dann nur „Masken im Browser“ nachbaut, entstehen doppelte Regeln. Das merkt man im Betrieb: andere Ergebnisse, mehr Support, schwerere Fehleranalyse.
Die saubere Lösung ist ein gemeinsamer Service-Kern. Also eine zentrale Prozessschicht, die Rechte, Prüfungen und Statuswechsel übernimmt.
Desktop und Portal greifen über definierte Schnittstellen darauf zu. So modernisieren Sie schrittweise, ohne Big-Bang.
Wenn dazu Fragen offen sind, sprechen Sie mich gern an. Wenn Sie dazu Fragen haben oder das Thema auf Ihre eigene Umgebung beziehen moechten, sprechen Sie uns gern an.
У багатьох компаніях фахова «штаб-квартира» роками виростала як Delphi-десктопна програма: VCL-клієнт, глибокі процесні знання, швидкий ввід даних, канали друку й звітності, спеціальне обладнання й часто прямий доступ до бази даних у LAN. Водночас зростають очікування щодо самообслуговування та зовнішньої співпраці: клієнти хочуть перевіряти статуси замовлень, обмінюватися документами або фіксувати рекламації — без VPN, без розгортання клієнта та без локальних інсталяцій.
Комбінування Delphi десктопу та веб-порталів на практиці означає звести ці два світи так, щоб експлуатація, безпека та консистентність даних залишалися керованими. Важливим є не «відтворення» форм у браузері, а архітектура, що чисто розділяє процеси, права й шляхи передачі даних та дозволяє обом фронтендам працювати за спільними правилами. Результат — шлях модернізації без Big-Bang: десктоп залишається продуктивним, тоді як веб-портал росте під контролем.
Ця стаття призначена для IT-керівників, адміністраторів і технічних відповідальних у проєктах. У фокусі — впливи на експлуатацію, адміністрування, інтерфейси, безпеку, зберігання даних та міграцію — менше деталей про фреймворки. Ви отримаєте практичні шаблони, критерії прийняття рішень і типові пастки з протидіями.
Чому «Портал замість Десктопу» рідко реалістично
У B2B-середовищах є багато причин, через які десктоп-клієнт залишається виправданим. Адміністратори часто бачать це на практиці: портал ідеальний для розподілених користувачів, але певні завдання в десктопі залишаються ефективнішими або взагалі можливими лише там.
Сильні сторони десктопу, що важать у роботі
- Складний ввід даних з дуже щільними формами, клавіатурною взаємодією, великими табличними представленнями та швидкими переходами між записами.
- Периферія та локальні інтеграції, як-от етикеткові принтери, сканери, послідовні пристрої або спеціальні Windows-компоненти.
- LAN-близька продуктивність, коли обробляються великі обсяги даних або процес вимагає надзвичайно низьких затримок.
- Зрослі робочі потоки з багатьма винятками, при яких 1:1-порт у портал спочатку несе високі ризики.
Переваги порталу, що покривають нові вимоги
- Зовнішній доступ для клієнтів, постачальників або партнерів без необхідності розгортання клієнта.
- Централізоване керування (версії, функції, права) з чітким зовнішнім краєм.
- Незалежність від пристрою (браузер, мобільне використання) для виїзних співробітників і менеджменту.
- Цілеспрямоване відкриття процесів, як-от перевірка статусу, завантаження файлів, затвердження або треки запитів/тикетів.
У поєднанні лежить користь: десктоп залишається «потужним інструментом» для внутрішніх ролей, портал стає контрольованим доступом для зовнішніх груп користувачів. Щоб це не перетворилося на дві паралельні «істини», потрібне сполучне ядро.
Коли ви поєднуєте Delphi десктоп і веб-портали: три цільові архітектури
При виборі архітектури йдеться насамперед про зони відповідальності: де лежить фахове правило? Хто може змінювати дані? Який шар є «Single Source of Truth» (тобто визначальним джерелом правил і станів)? Для технічних рішальників важливо: вибір має прямі наслідки для експлуатації, розслідування помилок, реліз-менеджменту та безпеки.
Варіант A: Портал як доповнення через REST-API, десктоп лишається провідним
Портал обслуговує вибрані юзкейси, типово «читання та ініціація»: статуси, документи, затвердження, простий ввід. Для цього вводиться Delphi REST-API або окремий REST-сервер. Десктопна програма спочатку може й надалі звертатися безпосередньо до бази даних.
Оперативна перевага: швидкий старт, мінімальні втручання в десктоп, підходить для першого корисного порталу.
Ризик: існують два шляхи доступу до даних (Десктоп → БД напряму, Портал → API). Якщо бізнес-логіка винятково в десктопі, з’являються неконсистентності. У відповідь потрібно починати з функцій порталу, де правила прості й можуть бути відображені на сервері (наприклад, надання документів, перевірка статусу, визначені дії затвердження).
Варіант B: Сервісне ядро як спільний шар процесів (рекомендовано при паралельній роботі)
Тут ви крок за кроком переносите бізнес-логіку з десктопу в сервіси. Десктоп і портал використовують одні й ті самі ендпоїнти. Десктоп стає більш «Rich Client» (UI, локальні інтеграції), а правила й валідації розміщуються на сервері.
Оперативна перевага: центральне місце для прав, аудиту, логіки станів і валідацій; консистентна поведінка на всіх фронтендах.
Зусилля: вищі на початку, бо треба чітко спланувати стандарти API, формати помилок, версіонування, моніторинг і деплой. Зате згодом зусилля значно знижуються, оскільки менше особливих шляхів.
Варіант C: Портал веде, десктоп лишається як спеціалізований клієнт
Цей варіант має сенс, якщо браузер стратегічно має стати стандартним доступом (наприклад, дуже розподілена організація), а десктоп зберігається для певних ролей зі спеціальним обладнанням або для високопродуктивного вводу. Сервісне ядро має бути особливо стабільним і масштабованим.
Layer-3 архітектура як зрозумілий орієнтир
Незалежно від варіанту допомагає Layer-3 архітектура: (1) презентація (десктоп/портал), (2) прикладний та доменний шар (юзкейси, правила), (3) інфраструктура (база даних, файлове сховище, messaging, зовнішні системи). Для адміністраторів це важливо, бо межі експлуатації стають чіткими: що є «проблемою фронтенду», що — «проблемою сервісу», що лежить у базі даних або в сховищі? Таке розділення скорочує час розслідування помилок і зменшує побічні наслідки при деплойментах.
Практичний аспект: як десктоп і портал ділять один і той самий процес
Найбільший виклик — рідко «побудувати портал», а радше питання: як десктоп і портал розподіляють відповідальності в одному процесі, щоб правила не доводилося дублювати? Три шаблони особливо релевантні на практиці.
1) Use-Case-API замість табличних або CRUD-API
Поширена тупикова ситуація — API, що просто відображає таблиці бази даних назовні («Create/Read/Update/Delete»). Тоді правила доводиться відтворювати в порталі, а десктоп лишається при своїх правилах. Кращими є Use-Case-API: ендпоїнти описують фахові дії, як-от «створити рекламацію», «завершити замовлення», «завантажити документ», «підтвердити статус доставки».
Ефект в експлуатації відчутний: валідації відбуваються на сервері, повідомлення про помилки відтворювані, і обидва клієнти (десктоп і портал) викликають один і той самий процес через однакову логіку.
2) Робити конфлікти й повтори керованими
З появою порталу зростає ймовірність паралельних змін і повторних запитів (наприклад через тайм-аути, ретраї чи подвійні кліки користувачів). Тут допомагають три концепції, не вводячи «довготривалих блокувань»:
- Ідемпотентність: критичні дії так організовані, щоб повторний виклик мав той самий ефект і нічого не виконувалося двічі. Практично це часто реалізується через унікальний ідентифікатор запиту (Idempotency Key).
- Оптимістична конкурентність: запис несе інформацію про версію (наприклад «версія рядка»). При зміні сервіс перевіряє, чи версія збігається, і акуратно повертає конфлікт при невідповідності.
- Короткі транзакції: замість «блокувати все» операції запису тримаються короткими. Тривалі роботи (наприклад експорт, пакети звітів) виконуються асинхронно.
Для технічних рішальників важливо: ці механізми зменшують навантаження на підтримку, бо типові симптоми («виконалося двічі», «мій запис зник») з’являються значно рідше.
3) Чітке моделювання станів і передач
Якщо десктоп обробляє складні випадки, а портал «лише» створює заявки або підготовчі етапи, вам потрібні визначені переходи станів. Практичний спосіб: портал створює або доповнює записи в чітко обмежених статусах (наприклад «подано»), десктоп обробляє спеціальні випадки, а сервісне ядро вирішує і протоколює зміну станів. Так ви запобігаєте ситуації, коли клієнт порталу побічно «ламає» процес через некоректну конфігурацію.
Дані й документи: часто недооцінена зона інтеграції
Майже кожен портал працює з файлами: завантаження, підтвердження, накладні, зображення, PDF-версії. Для адміністраторів це ключове питання, бо впливає на бекап, права доступу, перевірку на віруси, витрати на сховище та продуктивність.
Де зберігати файли: база даних, файловий шар чи об’єктне сховище?
Існує три поширені варіанти зберігання, кожен із яких породжує власну операційну реальність:
- База даних (BLOB): підходить, коли транзакції мають бути суворо пов’язані і backup/restore має бути єдиним пакетом. Недоліки — часто більші розміри БД і довші вікна бекапу.
- Файлова система/Share: типово On-Prem, добре інтегрується в існуючі концепти бекапу. Важливі чіткі права доступу й API-шар, що контролює доступ.
- Об’єктне сховище: має сенс при масштабуванні, правилах життєвого циклу або коли зовнішні доступи потрібно технічно чітко ізолювати. Потребує продуманої моделі ключів і прав доступу.
Незалежно від місця зберігання: портал не повинен «напряму» тягнути файли з шару share. Краще контролювати завантаження через сервіси з перевіркою прав, протоколюванням та, за потреби, тимчасовими URL для завантаження з обмеженим терміном дії.
PDF і звіти: серверна генерація замість дублювання
Delphi-десктопи часто мають зрослі канали друку й звітності. Портали теж потребують тих самих вихідних матеріалів у PDF. Замість підтримки двох реалізацій виправдана централізована генерація документів у сервісному ядрі: шаблони, версіонування й формати формуються на сервері; десктоп і портал споживають готовий результат. Для експлуатації це дає зрозумілі вихідні дані, уніфіковане зберігання і меншу залежність від десктопних інсталяцій.
REST-сервери й сервіси: Delphi, C# чи змішана архітектура
При рішенні «Delphi чи C#» для компаній питання рідше ідеологічне, а більше залежить від командних навичок, середовища експлуатації та підтримуваності. У багатьох випадках реалістична змішана архітектура за умови чіткого розрізнення відповідальностей.
Delphi як сервісна платформа: виправдано при наявній бізнес-логіці
Якщо бізнес-логіка й доступ до даних уже міцно закладені в Delphi, то Delphi-орієнтований REST-сервер може бути ефективним. Для адміністраторів і рішальників важливо розуміти: робота сервісу — це не «безкінечний десктоп». Продуктивний сервіс потребує чіткої конфігурації, коректних таймаутів, структурованих логів, health-checks і відтворюваного деплойменту.
Також варто модернізувати підключення до даних, якщо досі використовуються старі драйвери або BDE. BDE-Ablösung і перехід на сучасні механізми доступу до даних зменшать збої в роботі й полегшать деплой, оскільки потреба в legacy-компонентах для інсталяції й обслуговування зменшиться.
C# сервіси в екосистемі порталу: часто через хостинг і identity
Якщо портал розробляється в .NET-домінованому ландшафті, то C# сервіси часто є природним вибором — не останньою чергою через інтеграцію Identity, існуючі стандарти експлуатації й хостинг за Microsoft IIS або в контейнерних платформах. Вирішальне — уникати дублювання логіки: або ядро бізнес-логіки залишається в Delphi-сервісах і C# займається темами на краю (наприклад оркестрація, специфічна для порталу), або планується контрольована міграція логіки в .NET з чіткими межами відповідальності між бізнес-підрозділами.
API-Gateway: елемент порядку, але не обов’язковий
API-Gateway може концентрувати центральні функції (маршрутизація, rate-limits, логування, аутентифікація). Для невеликих стартових архітектур часто вистачає послідовного API зі спільними стандартами. Проте щойно з’являється кілька сервісів і груп користувачів, gateway допомагає утримувати зовнішню кромку стабільною та централізовано впроваджувати політики.
Аутентифікація й права: від внутрішнього десктопу до зовнішнього порталу
З появою порталу змінюється ландшафт користувачів: поряд із внутрішніми аккаунтами з’являються зовнішні облікові записи, ролі та манданти. З цього випливають вимоги до Identity, прав доступу й аудиту. Для адміністраторів це критично, бо системи ідентифікації й моделі ролей пізніше важко змінювати.
SSO через SAML 2.0 або OIDC: менше адміністративної роботи, кращий контроль
У B2B-настановах широко використовується SAML 2.0 (Single Sign-On через Identity Provider), бо компанії хочуть використовувати існуючі ідентичності. OIDC (OpenID Connect) також поширений, особливо в сучасних платформах. Класичні логіни з юзер/пароль можливі, але вони додають витрати на політику паролів, MFA, процедури скидання й підтримку.
Архітектурно важливо: аутентифікація (хто ти?) і авторизація (що ти можеш?) мають перевірятися на сервері — не в фронтенді порталу.
Мультиарендність і модель ролей: не відкладати «на потім»
Клієнтський портал практично завжди вимагає ізоляції мандантів: клієнт має бачити лише свої дані. Це потрібно реалізовувати у сервісному ядрі, бажано через:
- Claims у токені (наприклад Tenant-ID, ролі, прив’язка до контракту), щоб сервіси могли приймати рішення.
- Перевірки на рівні запису (row-level checks у бізнес-логіці), а не лише «сховати меню» у UI.
- Аудит-трейли для важливих дій (хто, що, коли) плюс кореляція через Request-ID для розслідування помилок.
Десктоп, якщо потрібно, також може працювати з токенами проти того самого стеку ідентифікації. Це зменшує особливі шляхи й полегшує простежуваність змін, особливо коли портал і десктоп працюють із тим самим записом.
Модернізація доступу до даних: FireDAC, PostgreSQL і контрольовані шляхи даних
Багато Delphi-десктоп-рішень історично зростали з прямим доступом до БД. Як тільки додається портал, це стає архітектурним питанням: шляхи даних мають бути контрольованими, валідації — центральними, а продуктивність — стабільною й під паралельним навантаженням.
FireDAC як база для підтримуваного доступу до даних
BDE-Ablösung mit nativer Anbindung є в Delphi-середовищах поширеним стандартом доступу до сучасних БД. Важливішим за сам компонент є уніфікація: параметризовані запити, чіткі границі транзакцій, уніфікована обробка помилок і вимірювані часи виконання. Для експлуатації важливо, щоб таймаути й використання ресурсів були планованими, а проблеми — відтворюваними в логах і моніторингу.
PostgreSQL з Delphi: керовано при чистій схемі типів і міграцій
PostgreSQL mit Delphi працює стабільно за умови, що мапінг типів (наприклад UUID, часові мітки, поля JSON), індекси й міграції схем опрацьовані коректно. Портали генерують багато фільтрованих спискових запитів. Фільтри, пейджинг і сортування слід виконувати на сервері, щоб не передавати великі обсяги даних даремно. Це знижує навантаження і покращує UX, без уповільнення десктопу.
Експлуатація, деплой і моніторинг: надати порталу зрілість для бекендів Delphi
Портал зазвичай доступний постійно й отже більш інтенсивний для експлуатації, ніж чисто десктопне рішення. Для адміністраторів це сфера, де хороша архітектура одразу дає результат: відтворювані деплойменти, чітка observability (логи/метрики) і визначені вікна технічного обслуговування.
Windows-сервіс чи Linux-сервіс: вирішує модель експлуатації
Delphi-сервіс можна запускати як Windows- та Linux-сервіси або як демон на Linux. Важливіше за ОС — стандарти, які роблять експлуатацію стабільною:
- Health-Checks для моніторингу і балансувальників навантаження (наприклад «сервіс живий» і «база даних доступна»).
- Структуроване логування (включно з Request-ID, користувачем/мандантом, часом виконання, статус-кодами), щоб випадки підтримки можна було відтворити.
- Конфігурація без перезбирання (наприклад змінні середовища, централізовані конфігураційні файли), щоб деплоями можна було керувати автоматично.
- Можливість роллбеку через чіткі версії й міграції бази даних, що забезпечують безпечне повернення.
Профілі навантаження: портал = «багато коротких запитів» замість «мало довгих сесій»
Десктоп часто породжує довші сесії на одного користувача, тоді як портал створює багато коротких паралельних запитів. Типові технічні заходи:
- послідовний пейджинг, серверні фільтри та обмежені розміри відповідей
- кешування для довідкових даних і рідкісних запитів
- асинхронні завдання для тривалих процесів (експорти, бандли звітів)
- rate-limits і захисні механізми проти зловживань
Для рішальників центральне тут: продуктивність — це не «тонке налаштування наприкінці», а частина визначення API (розміри відповідей, таймаути, фонові обробки).
Модернізація без Big-Bang: надійний шлях у п’ять кроків
Повна перебудова рідко потрібна і часто ризикована, бо процесні знання зосереджені в Delphi-клієнті. Підходи з поетапною доставкою, де кожен етап продуктивно використовуваний і не загрожує експлуатації, показали себе найкраще.
1) Інвентаризація: процеси, володіння даними, інтеграції
Не починайте з форм, почніть з юзкейсів: які процеси мають піти в портал? Які дані може бачити або змінювати зовнішній користувач? Які інтерфейси є до ERP, DMS або CRM? З цього формується пріоритетизований список API, що дає реальний бізнес-ефект.
2) Визначення основ сервісу: Auth, формат помилок, логування, версіонування
Ця база вирішує майбутню підтримуваність. Раннє узгодження стандартів для аутентифікації/авторизації, уніфікованого формату помилок, кореляції запитів, версіонування API і телеметрії знижує тертя між командою порталу, бекенду і експлуатацією.
3) Поставити перший порталний шлях end-to-end
Обрати процес з чіткими межами (наприклад область документів або перевірки статусу). Важливо, щоб ланцюжок був повним: логін, перевірка прав, API, UI, логування, моніторинг, експлуатація. Так організація рано побачить, які стандарти працюють у реальній експлуатації.
4) Цілеспрямоване підключення десктопу: критичні шляхи запису через сервіси
Коли сервіси стабільні, переводьте окремі функції десктопу: передусім зміни статусів, затвердження або центральні валідації. Десктоп залишається продуктивним, але правила стають консистентнішими, і прямий запис у БД поступово скорочується.
5) Консолідація: усунення подвоєних правил і особливих шляхів
Інакше з часом утворюються «дві системи». Плануйте регулярну консолідацію: які правила реалізовано двічі? Де портал може використовувати десктоп-сервіс? Які звіти варто генерувати централізовано? Мета — керована платформа, а не догма.
Типові пастки з точки зору експлуатації — і як їх уникнути
Правила відтворюють у порталі
Це приводить до відхилень і випадків підтримки. Контрзаходи: Use-Case-API з серверними валідаціями, чіткими повідомленнями про помилки і, якщо можливо, спільними сценаріями тестування бізнес-логіки.
Неясна власність даних між десктопом і порталом
Якщо обидва клієнти можуть «все» змінювати, виникають конфлікти. Контрзаходи: модель статусів, визначені зони відповідальності і оптимістична конкурентність для паралельних змін.
Безпека як доповнення після впровадження
Особливо для клієнтських порталів SSO, перевірки мандантів, безпечні завантаження файлів і аудит потрібні з самого початку. Додавати це потім дорожче й ризикованіше з погляду вразливостей.
Відсутність прозорості в експлуатації
Без Request-ID, структурованих логів і health-checks розслідування помилок перетворюється на детективну роботу. Контрзаходи: observability як обов’язковий елемент перших релізів сервісів.
Висновок: сервісне ядро поєднує силу десктопу з охопленням порталу
Комбінація Delphi-десктопу та веб-порталу в багатьох компаніях є найреалістичнішим шляхом збереження ключових процесів та одночасного забезпечення зовнішньої співпраці. Вирішальною є не експлуатація двох роз’єднаних світів, а створення сполучного сервісного ядра: Use-Case-API, чисті права, відтворювані стани, контрольовані шляхи даних і модель експлуатації з логуванням, моніторингом і планованими деплойментами.
Так реалізується модернізація з проміжними цілями: десктоп залишається продуктивним, портал приносить ранню користь, а архітектура поступово стає більш послідовною й підтримуваною.
У професійному контексті також відіграє роль Delphi Modernisierung, коли інтеграції, потоки даних і подальший розвиток мають узгоджено працювати.
Наступний крок
Якщо тема перетворюється на реальний проєкт, архітектуру, наявні системи та експлуатацію слід розглядати разом на ранньому етапі.
Ми підтримуємо не лише в окремих питаннях, а й тоді, коли з уривків вихідного коду, питань, пов’язаних із legacy, або ідей порталу має вирости надійний корпоративний проєкт.
- Поточний стан, цільова архітектура та технічні ризики оцінюються спільно.
- REST, доступ до даних, портали та Rollout не відсуваються на пізніший етап.
- Ви заздалегідь бачите, який шлях є економічно та операційно життєздатним.