Net-Base Magazin

07.06.2026

C# és Delphi egy közös architektúrában: pragmatikus integráció a kizáró választás helyett

Sok vállalat üzemeltet évek során felgyűlt Delphi-desktopalkalmazásokat, és párhuzamosan épít új C#-szolgáltatásokat és portálokat. A cikk bemutatja, hogyan működnek tisztán együtt egy közös architektúrában a C# és a Delphi: világos rétegzés, stabil interfészek, közös...

07.06.2026

A magazintémától a projektgyakorlatig

A bejegyzéshez tartozó szolgáltatási és technikai oldalak

Sok IT-osztályon a kiinduló helyzet hasonló: egy stabil, folyamathoz közeli Delphi asztali alkalmazás viszi a kritikus folyamatokat, miközben az új követelmények a web, portálok, mobil használat és a felhőszolgáltatásokkal való integráció irányába mutatnak. Ugyanakkor a C# sok vállalatnál elfogadott, ha szolgáltatásokról, web-API-król és identitásintegrációról van szó. A központi kérdés tehát nem az, hogy „Delphi vagy C#?”, hanem: hogyan kombináljuk C# és Delphi egy közös architektúrában, úgy, hogy az üzemeltetés, karbantartás, adatkezelés és biztonság kezelhető maradjon.

Ez a bejegyzés gyakorlatban bevált architektúraelveket ír le olyan vállalati környezetekhez, ahol nem lehet vagy nem cél mindent újjáépíteni. A fókusz a Desktop-kliens, szolgáltatások, adatok és interfészek közötti egyértelmű felelősségmegosztáson van – és azon, hogyan tervezzen modernizálási lépéseket alacsony kockázattal, anélkül hogy veszélyeztetné a folyamatban lévő műveleteket.

Miért normálisak a vegyes stackek vállalati környezetben

Fokozatosan kialakult vállalati digitális megoldások ritkán jönnek létre zöldmezős alapon. Delphi-alkalmazásokat gyakran évek alatt bővítették, közel az üzleti folyamatokhoz, kiterjedt adatlogikával és a speciális esetekre vonatkozó mély szakértelemmel. Ugyanakkor új követelmények jelentek meg: önkiszolgáló portálok, automatizált adatcserék, DMS/CRM/ERP csatlakoztatása, többbérlős működés, nagyobb auditálhatóság vagy Single Sign-on.

C# ebben a kontextusban gyakran előnyt jelent a web- és szolgáltatásökoszisztémákban: széles körű hosting-lehetőségek, standardizált middleware, jó integráció az Identity Providerekkel és bevált minták web-API-khoz. Delphi ezzel szemben erős marad, amikor nagy teljesítményű Windows alapú asztali kliensek, hosszú távon karbantartott VCL-alkalmazások vagy specifikus multiplatform kliensek (például FMX-en keresztül) a cél.

A keveredés tehát nem kivétel, hanem reális válasz a befektetésvédelemre és a modernizációs nyomásra. Döntő fontosságú, hogy a közös üzemeltetés ne váljon állandó építkezéssé.

Architektúra alapelv: egyértelmű rétegek a nyelvi határok helyett

Ha két nyelv találkozik, nagy a kísértés, hogy a szétválasztást a technológia mentén szervezzük („Minden Delphi örökölt, minden C# új“). Technikailag ez gyakran rövid távon működik, de hosszú távon súrlódáshoz vezet: duplikált üzleti szabályok, tisztázatlan felelősségek és nehezen reprodukálható hibák.

Ehelyett bevált megközelítés egy szakmai rétegződés, gyakran Layer-3 Architektur formájában: megjelenítés (UI), domén (üzleti logika) és infrastruktúra (adat-hozzáférés, külső rendszerek). A lényeg nem annyira az elméleti modell, mint a gyakorlati hatás: az adatokra, validációkra és munkafolyamatokra vonatkozó döntéseket egy helyen hozzák meg, és stabil interfészeken keresztül szolgáltatják őket.

Egy vegyes architektúrában ez gyakorlatilag azt jelenti: Delphi továbbra is szolgáltathat UI-részt (vagy bizonyos munkafolyamatokat), míg C# szolgáltatások becsomagolhatnak egy szakmai doménréteget – vagy fordítva. Fontos, hogy a rétegek közötti határ technikailag tiszta és tesztelhető legyen.

C# és Delphi egy közös architektúrában: három bevált integrációs mintázat

Delphi és C# összekapcsolására nincs „egyetlen” helyes út. A jó döntések a működésre, biztonsági követelményekre, késleltetésre, adatforgalomra és kiadási ciklusokra támaszkodnak. A gyakorlatban három minta alakult ki.

1) Szolgáltatásorientáció HTTP/REST-en keresztül mint alapértelmezett kapcsolódás

Gyakran a legrobosztusabb az üzemeltetés és továbbfejlesztés szempontjából, ha REST-API-kon keresztül történik az illesztés (HTTP-alapú interfészek). Delphi-kliensek C#- vagy Delphi-szolgáltatásokat hívnak; C#-portálok ugyanazokat a végpontokat használják. Ez a leválasztás kiszámíthatóbbá teszi a kiadásokat: nem feltétlenül szükséges kliensfrissítés, ha az API visszafelé kompatibilis marad.

Lényeges a professzionális kialakítás: timeouts, retries, idempotencia (ismételt kérések mellékhatások nélkül), világos hibakódok és verziózási stratégia. Adminisztráció és üzemeltetés szempontjából továbbá számítanak: egységes logok, nyomon követhető request-ID-k és jól mérhető válaszidők.

2) Közös adatbázis: csak egyértelmű játékszabályokkal

Delphi és C# közös adatbázis-hozzáférése csábító, mert kezdetben gyorsnak tűnik. Hosszú távon azonban kockázatos, ha mindkét rendszer közvetlenül ugyanazon táblákra ír. Az oka: az üzleti szabályok átkerülnek trigger-ekbe, tárolt eljárásokba vagy „valahová a kliensbe”. Ez megnehezíti a hibaanalízist és az auditokat.

Ha a közös adatbázis elkerülhetetlen (pl. átmeneti fázisokban), egyértelmű szabályok segítenek:

  • Írási hozzáférések centralizálása: egy rendszer legyen „System of Record” bizonyos entitások esetén.
  • Szerződések definiálása: nézetek (Views) vagy API-k mint stabil olvasási réteg közvetlen táblahozzáférés helyett.
  • Migrációs ablakok tervezése: az adatbázis-változtatásokat mindig visszafelé kompatibilisen vezessük be (pl. új oszlopok először opcionálisak).

Műszaki értelemben az adatbázis ekkor infrastruktúra-komponens, nem az integrációs busz.

3) Messaging/Events für asynchrone Prozesse

Leválasztott folyamatokhoz (pl. importok, értesítések, utófeldolgozás, interfész-feladatok) az aszinkron modell célszerű: az egyik rendszer eseményeket publikál, egy másik fogyasztja és feldolgozza azokat. Ez csökkenti a közvetlen függőségeket és stabilizálja a terhelési csúcsokat.

IT-vezetés és adminisztrátorok számára fontos: monitoring (sorhosszok), dead-letter-koncepciók (meghibásodott üzenetek), újraindulási viselkedés és egyértelmű domain-specifikus idempotencia. Az események nem helyettesítik a tiszta törzsadatkezelést, de jó eszközök a robusztus folyamatláncokhoz.

Adatszerződések és kompatibilitás: az alulértékelt lényeg

Az integrációs mintától függetlenül a stabilitást az adatszerződések minősége határozza meg. Az adatszerződés a mezők, típusok, kötelező/opcionális és szemantika kötelező érvényű leírása. REST-API-knál ez tipikusan JSON; a lényeg nem „magában a JSON”, hanem a változtatások kezelésére vonatkozó fegyelem.

Bevált szabályok, amelyek észrevehetően egyszerűsítik az üzemeltetést:

  • Bővíteni, ne törni: új mezők hozzáadása, a régi mezők kezdetben továbbra is kiszolgálása.
  • Mezőszemantika dokumentálása: ne csak „string”, hanem például ISO-dátum, időzóna, megengedett állapotok.
  • Enum-értékeket toleránsan kezelni: a klienseknek túl kell élniük az ismeretlen értékeket (forward-compatibility).
  • API-verziózást tudatosan alkalmazni: nem minden kiadás igényel új verziót; de a visszafelé kompatibilitást sértő változtatásokat egyértelműen el kell különíteni.

Ezek a pontok különösen fontosak, ha Delphi-asztali klienseket nem lehet olyan gyakran frissíteni, mint a webszolgáltatásokat.

Hitelesítés és jogosultságkezelés: közös biztonsági modell

A vegyes architektúrák ritkán a „technikán” buknak el, gyakrabban az inkonzisztens biztonságon. A vállalatok számára döntő: ki mit tehet? Hogyan ellenőrzik ezt? Hogyan auditálják? Egy közös modell elkerüli a párhuzamos felhasználókezelést és az ellentmondó szerepköröket.

Gyakorlatban ez egy központi identitásréteghez vezet: például über SAML 2.0 (föderált Single Sign-on, gyakran vállalati környezetben) vagy OpenID Connect (OAuth2-alapú, gyakran modern Web-API-khoz). C#-Services lassen sich meist direkt an einen azonosító szolgáltató anbinden; Delphi-Clients können Tokens beziehen und bei API-Calls mitsenden. Wichtig ist, dass auch asztali alkalmazások keine „Sonderrechte“ per Datenbankzugriff erhalten.

Rendszergazdák számára központi:

  • Token-élettartamok és frissítési stratégia (hogy a kliensek stabilan fussanak és mégis biztonságosak legyenek)
  • Szolgáltatás–szolgáltatás hitelesítés belső kommunikációhoz (pl. mTLS vagy aláírt tokenek)
  • Legkisebb jogosultság elve: szerepeket és jogosultságokat ne határozzunk túl általánosan
  • Audit-naplók: biztonsági szempontból releváns műveletek nyomonkövethető naplózása

Üzemeltetési koncepciók: Windows- und Linux-Services, IIS und Prozesse im Alltag

Egy architektúra csak akkor „jó” egy vállalatnál, ha üzemeltethető: frissítések tervezhetők, hibák lokalizálhatók, a terhelés kezelhető. Vegyes környezetekben a leggyakoribb üzemeltetési variánsok:

  • Windows- és Linux-Services: alkalmas háttérfeladatokra, interfész-futtatásokra, worker-ekhez; jól integrálható hagyományos Windows-szerver üzemeltetési modellekbe.
  • Windows- und Linux-Services/Daemon: célszerű konténerizált vagy VM-alapú üzemeltetési modellekhez; gyakran stabil tartós üzemeltetésben, jó automatizálhatóság systemd-n keresztül.
  • Microsoft IIS: elterjedt hosting webalkalmazások és reverse-proxy forgatókönyvek számára Windows-központú környezetekben.

Fontos, hogy Delphi- és C#-komponensek hasonló üzemeltetési szabványokat teljesítsenek: konzisztens Health-Endpointek (életjelek), meghatározott timeoutok, korlátozott erőforrás-felhasználás, valamint egy világos deployment- és rollback-eljárás. Ez csökkenti a „technologiespezifische” Sonderbehandlungen.

Logging, Tracing und Metriken: ein gemeinsames Observability-Niveau

Különösen két technológiai stack esetén a végigkövethető diagnosztikai láncok döntőek. Tipikus probléma: a Delphi-Client meldet „Fehler beim Speichern”, a C#-Service hat einen Timeout, die Datenbank meldet Locks – ohne gemeinsamen Zusammenhang.

Gyakorlatban bevált megoldások:

  • Korrelációs azonosítók kérésenként (Client → API → DB), hogy a logok összevonhatók legyenek.
  • Strukturált naplózás (kulcs/érték formátum a sima szövegsorok helyett), későbbi szűréshez.
  • Metrikák a késleltetésre, hibaarányokra, sorhosszokra és erőforrás-használatra.
  • Hibaklasszifikáció: üzleti hibák (validáció) külön a technikai hibáktól (timeout, hálózat).

Ezek az alapok a gyakorlatban több időt takarítanak meg, mint bármilyen vita a „helyes nyelvről”.

Adathozzáférés és migráció: BDE-kiváltás, FireDAC és modern adatbázisok

A Delphi-állományokban az adathozzáférés történelmileg jelentős szerepet tölt be. Ha még régi hozzáférési utak, mint a Borland Database Engine (BDE), használatban vannak, további nyomás keletkezik: operációs rendszer-frissítések, 64‑bites átállások, illesztőprogram-ellátottság, biztonsági követelmények. Egy BDE-kiváltás ilyenkor nem csupán modernizáció, hanem kockázatcsökkentés is.

Tipikus a váltás: BDE-kiváltás natív csatlakozással (modern adathozzáférési réteg a Delphi-ben), kombinálva egy üzemeltethető adatbázissal (pl. PostgreSQL, SQL Server, MariaDB). Egy közös Delphi/C#-architektúrához két szempont fontos:

  • Tranzakcióhatárok: Ki indítja/commitálja a tranzakciókat, és hogyan szabályozzák a párhuzamos írási hozzáféréseket?
  • Zárolási- és izolációs stratégia: hogy az asztali munkafolyamatok és a szolgáltatások ne blokkolják egymást.

Migrációknál beválik egy lépcsőzetes terv: először az illesztőprogram- és hozzáférési réteget modernizálni, majd az adatmodellt konszolidálni, aztán az integrációs felületeket stabilizálni. Így a hibaforrások izolálhatók, és a visszaállítások reálisak lesznek.

Release-kezelés: különböző frissítési ciklusok összehangolása

Ismétlődő feszültségforrás a frissítési gyakoriság: a webszolgáltatások gyakrabban telepíthetők, az asztali kliensek gyakran ritkábban (rollout-ablakok, felhasználói kommunikáció, csomagolás). Egy közös architektúrának figyelembe kell vennie ezt az aszimmetriát.

Gyakorlati következmények:

  • API-visszafelé kompatibilitás kötelező, nem választható.
  • Feature Flags (funkcionális kapcsolók) segítenek az új funkciók szerveroldali, kontrollált aktiválásában.
  • Séma-migrációk fázisokban hajlandók futni: először kiterjeszteni az adatbázist, majd a szolgáltatás használja az új sémát, végül a kliens követi.
  • Egyértelmű deprecation: régi végpontokat vagy mezőket csak egy meghatározott időszak elteltével szabad eltávolítani.

Különösen szabályozott környezetekben fontos ezeket a szabályokat írásban, architekturális irányelvekként rögzíteni, hogy a döntéseket ne kelljen projekt szinten újrafelfedezni.

Jellemző buktatók és hogyan kerülhetők el őket rendszerezetten

Üzemeltetési szempontból a leggyakoribb problémák kevert Delphi/C#-környezetekben jól előre jelezhetők. Ha korán kezelik őket, a hosszú távú költségek jelentősen csökkennek.

Buktató 1: duplikált üzleti logika

Ha a Delphi-kliens és a C#-szolgáltatás ugyanazokat a szabályokat eltérően valósítja meg, „kísértethibák” keletkeznek: egy folyamat működik a UI-n, de az API-importnál meghiúsul. Ellenszer: a szabályokat központosítani a doménrétegben (szolgáltatás), vagy szakmailag egyértelműen hozzárendelni, beleértve egyértelmű validációs válaszokat.

Buktató 2: UI-megoldások a tiszta interfészek helyett

„Gyorsan csak beírunk egy adatbázismezőt” egyes esetekben ártalmatlannak tűnik, de árnyék-interfészeket hoz létre naplózás, hitelesítés és verziókezelés nélkül. Jobb: következetesen definiált végpontokon keresztül dolgozni, még ha ez kezdetben több fegyelmet is igényel.

Buktató 3: nem egyértelmű felelősségek az üzemeltetésben

Ha nem világos, melyik csapat melyik szolgáltatásért, melyik naplóért és mely működési paraméterért felel, a hibakeresés pingpongba torkollik. Gyakorlati segítséget jelent egy szolgáltatástérkép (melyik szolgáltatás, milyen függőségek, mely portok, milyen belső SLA-k) és egységes Runbooks a gyakori zavarokhoz.

Buktató 4: hiányzó biztonsági konzisztencia

Egy portál SSO-val, de egy asztali kliens helyi admin fiókokkal sok auditnál problémát okoz. Egy közös identitás- és szerepmodell csökkenti a kockázatot és a támogatási terhet.

Döntéstámogatás: Mi marad a Delphi, mi kerül a C#?

A célszerű felosztás kevésbé ideológiától, inkább a folyamatközeliségtől és az üzemeltetési követelményektől függ. Architektúra- és üzemeltetési nézőpontból iránymutatásként:

  • Delphi gyakran alkalmas: meglévő Windows-asztali kliensek (VCL), rendkívül reagáló UI-munkafolyamatok, offline-közeli forgatókönyvek, hosszú távú karbantartásra szoruló, kialakult felületek.
  • C# gyakran alkalmas: központi REST-API-k, ERP/DMS/CRM felé integrációs szolgáltatások, identitáshoz közeli komponensek, portálok és nagy változási gyakoriságú backend folyamatok.
  • Tudatos döntés: az adatlogika és a validáció ne maradjon „a kliensben”, ha több frontend létezik (asztali, portál, importfolyamatok).

Fontos: a cél nem az, hogy „minden C#-be kerüljön”, hanem egy terhelhető teljes architektúra, amelyben a modernizációs lépések tervezhetők és az üzleti folyamatok stabilan működnek.

Modernizációs út: lépésről lépésre az alkalmazástól a rendszerig

Gyakorlatban a közös architektúra gyakran átmenet, de hosszú folyamat. A reális modernizációs útvonal kerüli a nagy, kockázatos projekteket és mérhető köztes célokat állít:

  1. Interfészek stabilizálása: REST-API bevezetése mint szakmai határ, még ha belül nem minden „szép”.
  2. Adat-hozzáférés modernizálása: BDE-Ablösung, illesztőprogramok, 64‑bit támogatás, tiszta tranzakciók.
  3. Identitás centralizálása: SSO és szerepmodell minden hozzáférési módra.
  4. Üzemeltetés egységesítése: naplózás/monitoring/állapotellenőrzés, egyértelmű telepítési folyamatok, reprodukálható környezetek.
  5. Funkcionális modulok szétkapcsolása: a különösen változékony részeket szolgáltatásokba mozgatni, a UI-t lépésről lépésre egyszerűsíteni.

Ez a sorrend nem dogmatikus, de tipikusan minimalizálja a függőségeket: stabil interfészek és üzemeltetési koncepció nélkül minden további változtatás költségesebbé válik.

Összegzés: Az integráció architekturális feladat, nem nyelvi kérdés

Egy fenntartható kombináció Delphi és C# között nem „hídkönyvtárak” által jön létre, hanem tiszta szakmai határok, rendezett adat-szerződések és egy olyan üzemeltetési koncepció révén, amely a monitoringot, a biztonságot és a kiadáskezelést komolyan veszi. Ha C# és Delphi egy közös architektúrában felelősségi körök mentén tudatosan együttműködnek, a vállalatok mindenekelőtt egyet nyernek: modernizációt folyamatmegszakítás nélkül. Delphi továbbra is megbízhatóan kiszolgálhat stabil asztali munkafolyamatokat, míg C#-szolgáltatások integrációt, web-API-kat és portálokat biztosítanak központi platformfunkcióként.

Ha egy meglévő Delphi-környezetet lépésről lépésre modernizálni szeretne, vagy C#-szolgáltatásokat tisztán csatlakoztatni kíván, egy architektúra-áttekintés, amely az interfészekre, az adatokra, az üzemeltetésre és a biztonságra fókuszál, a leggyorsabb út a megalapozott döntésekhez. További részletek személyes egyeztetésben:

A szakmai környezetben fontos szerepet játszanak még a Delphi modernizáció és a REST-API a meglévő szoftvereknél, ha az integrációknak, az adatáramlásnak és a további fejlesztésnek tisztán kell együttműködnie.

Projektet vagy modernizációs tervet Net-Base részvételével egyeztetni.

Következő lépés

Ha egy témából valós projekt lesz, az architektúrát, a meglévő rendszert és az üzemeltetést korai fázisban együtt kell vizsgálni.

Nemcsak egyedi kérdésekben támogatunk, hanem akkor is, amikor forráskódrészletekből, örökölt rendszerekkel kapcsolatos témákból vagy portálötletekből robusztus vállalati projektet kell kialakítani.

  • A jelenlegi állapotot, a célállapotot és a műszaki kockázatokat együttesen értékeljük.
  • REST, az adathozzáférést, a portálokat és a bevezetést nem halasztjuk későbbi fázisokra.
  • Ön korán látja, melyik út gazdaságilag és üzemeltetési szempontból tartható.

Bejegyzés megosztása

Ezt a bejegyzést közvetlenül megosztani

LinkedIn, X, XING, Facebook, WhatsApp és E-Mail azonnal elérhetők. Instagramra a linket és a rövid szöveget közvetlenül előkészítjük.

E-mail

Az Instagram egy új lapon nyílik meg. A link és a rövid szöveg előzetesen a vágólapra másolódik.