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, folyamatszintű Delphi-asztali alkalmazás viszi a kritikus folyamatokat, miközben új követelmények a web, portálok, mobil használat és a felhőszolgáltatásokkal való integráció irányába nyomnak. Ugyanakkor sok vállalatnál a C# a megszokott választás, ha szolgáltatásokról, Web-API-król és identitásintegrációról van szó. A központi kérdés ezért már nem az, hogy „Delphi vagy C#?“, hanem: C# és Delphi egy közös architektúrában úgy kombinálni, hogy az üzemeltetés, karbantartás, adattárolás és biztonság kezelhetők maradjanak.

Ez a cikk gyakorlati, alkalmazható architektúraelveket ír le, amelyek olyan vállalati környezetben váltak be, ahol nem lehet vagy nem célszerű mindent újraépíteni. A hangsúly az egyértelmű felelősségi körökön van az asztali kliens, a szolgáltatások, az adatok és az interfészek között – valamint azon, hogyan tervezhetők alacsony kockázattal modernizációs lépések anélkül, hogy veszélyeztetnék a működő folyamatokat.

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

A meglévő digitális vállalati megoldások ritkán zöldmezős projektek eredményei. Delphi-alkalmazásokat gyakran évek során bővítettek, szorosan a szakmai folyamatokhoz kapcsolódva, kiterjedt adatlogikával és mély eseti ismeretekkel. Párhuzamosan új követelmények jelentek meg: önkiszolgáló portálok, automatizált adatcserék, DMS/CRM/ERP csatlakoztatása, többbérlős támogatás, nagyobb auditálhatóság vagy Single Sign-on.

Architektúraelv: világos rétegek a nyelvi határok helyett

Amikor 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 Legacy, 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.

Helyette bevált a szakmai rétegezés, gyakran Layer-3 architektúra formájában megvalósítva: Prezentáció (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, hanem a gyakorlati hatás: az adatokra, érvényesítésekre és munkafolyamatokra vonatkozó döntéseket egy helyen hozzák meg, és stabil interfészeken keresztül teszik elérhetővé.

Egy vegyes architektúrában ez gyakorlatilag azt jelenti: Delphi továbbra is szállíthat UI-részt (vagy bizonyos munkafolyamatokat), míg C# Services egy szakmai doménréteget zárhat le – 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 minta

Delphi és C# összekapcsolására nincs „egyetlen” helyes út. Jó döntéseket az üzemeltetés, a biztonsági követelmények, a késleltetés, az adatvolumen és a kiadási ciklusok határozzák meg. A gyakorlatban három minta alakult ki.

1) Szolgáltatásorientáltság HTTP/REST-n keresztül mint alapértelmezett összekapcsolás

Az üzemeltetés és a további fejlesztés szempontjából legtartósabb megoldás gyakran a REST-API-k (HTTP-alapú interfészek) használata. Delphi-kliensek hívnak C#- vagy Delphi-serviceteket; C#-portálok ugyanazokat a végpontokat használhatják. Ez a leválasztás kiszámíthatóbbá teszi a release-eket: kliensfrissítés nem feltétlenül szükséges, ha az API visszafelé kompatibilis marad.

Fontos a professzionális kialakítás: időkorlátok (timeouts), újrapróbálkozások (retries), idempotencia (ismételt kérések mellékhatások nélkül), egyértelmű hibakódok és egy verziózási stratégia. Az adminisztráció és az üzemeltetés számára további szempontok: egységes naplózás, nyomon követhető kérésazonosítók és jól mérhető válaszidők.

2) Közös adatbázis: csak egyértelmű működési szabályokkal

A Delphi és C# közötti közös adatbázis-hozzáférés eleinte csábító, mert gyorsan megvalósítható. Hosszú távon azonban kockázatos, ha mindkét rendszer közvetlenül ugyanazokra a táblákra ír. Az oka, hogy az üzleti szabályok átkerülnek trigger-ekbe, tárolt eljárásokba vagy „valahova a kliensbe”. Ez megnehezíti a hibakeresést és az auditokat.

Ha a közös adatbázis elkerülhetetlen (pl. átmeneti fázisokban), akkor világos szabályok segítenek:

  • Írási hozzáférések központosítása: egy rendszer „System of Record” legyen bizonyos entitásokra.
  • Szerződések meghatározása: nézetek (Views) vagy API-k mint stabil olvasási réteg a közvetlen táblalekérdezések helyett.
  • Migrációs ablakok tervezése: adatbázis-változásokat mindig visszafelé kompatibilisen bevezetni (pl. új oszlopok először opcionálisak legyenek).

Technikailag az adatbázis ekkor infrastruktúra-komponens, nem integrációs busz.

3) Messaging/Events az aszinkron folyamatokhoz

Leválasztott folyamatokhoz (pl. importfutások, értesítések, utófeldolgozás, interfész-jobok) érdemes aszinkron modellt alkalmazni: az egyik rendszer eseményeket publikál, a másik feldolgozza azokat. Ez csökkenti a közvetlen függőségeket és stabilizálja a terheléscsúcsokat.

IT-vezetés és rendszergazdák számára fontos itt: monitoring (sorhosszok), Dead-Letter koncepciók (sikertelen üzenetek), újraindítási/újrakezdési viselkedés és egyértelmű üzleti (domain) idempotencia. Az események nem helyettesítik a tiszta főadatkezelést, de jó eszközök a robusztus folyamatláncokhoz.

Adatkontraktok és kompatibilitás: az alulértékelt központi elem

Függetlenül az integrációs mintától az adatkontraktok minősége határozza meg a stabilitást. Egy adatkontrakt a mezők, típusok, kötelező/önkéntes jelleg és a szemantika kötelező érvényű leírása. REST-API-k esetén ez tipikusan JSON; nem a „JSON maga” a lényeg, hanem a változások kezelése iránti fegyelem.

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

  • Bővítés a törés helyett: új mezők hozzáadása; a régi mezőket először továbbra is szolgáltatni.
  • Mezőszemantika dokumentálása: ne csak „string” legyen megadva, hanem pl. ISO-dátum, időzóna, megengedett állapotok.
  • ENUM-értékeket tűrően kezelni: a klienseknek túl kell élniük az ismeretlen értékeket (forward-kompatibilitás).
  • API-verziózást tudatosan alkalmazni: nem minden kiadás igényel új verziót; a visszafelé nem kompatibilis változásokat azonban egyértelműen el kell határolni.

Ezek a pontok különösen fontosak, ha Delphi-desktop-kliensek nem frissíthetők olyan gyakran, mint a webszolgáltatások.

Hitelesítés és engedélyezés: közös biztonsági modell

Vegyes architektúrák ritkán a „technikán” buknak; gyakrabban az inkonzisztens biztonsági megoldásokon. A vállalat számára döntő: ki mit tehet? Hogyan történik az ellenőrzés? Hogyan történik az auditálás? Egy közös modell elkerüli a párhuzamos felhasználókezelést és az ellentmondó szerepkiosztásokat.

Gyakorlatban ez egy központi identitásréteghez vezet: például 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#-szolgáltatások rendszerint közvetlenül csatlakoztathatók egy Identity Provider-hez; Delphi-kliensek tokent kérhetnek és API-hívásoknál továbbíthatják azokat. Fontos, hogy asztali alkalmazások sem kapjanak „különjogokat” közvetlen adatbázis-hozzáférés útján.

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

  • Token élettartamok és frissítési stratégia (hogy a kliensek stabilan működjenek, ugyanakkor biztonságosak maradjanak)
  • Service-to-Service hitelesítés a belső kommunikációhoz (pl. mTLS vagy aláírt tokenek)
  • Least Privilege: szerepeket és jogosultságokat ne határozzák meg túl durván
  • Audit-Logs: a biztonság szempontjából releváns műveletek követhető naplózása

Üzemeltetési koncepciók: Windows- és Linux-szolgáltatások, IIS és a mindennapi folyamatok

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

  • Windows- és Linux-szolgáltatások: alkalmas háttérfeladatokra, interfész-futtatásokra, workerekre; jól integrálható klasszikus Windows-szerver üzemeltetési modellekbe.
  • Windows- és Linux-szolgáltatások/Daemon: ésszerű konténerizált vagy VM-alapú üzemeltetési modellekhez; gyakran stabil folyamatos üzem esetén, jó automatizálhatóság systemd-vel.
  • Microsoft IIS: elterjedt hoszting webalkalmazásokhoz és reverse-proxy forgatókönyvekhez Windows-központú környezetekben.

Fontos, hogy Delphi- és C#-komponensek hasonló üzemeltetési szabványoknak feleljenek meg: konzisztens health-endpointok (életjel), definiált timeoutok, korlátozott erőforrás-felhasználás, valamint egy világos telepítési és rollback eljárás. Ez csökkenti a „technológiára jellemző” különkezeléseket.

Naplózás, tracing és metrikák: közös megfigyelhetőségi szint

Különösen két technológiai stack esetén döntő a végigkövethető diagnosztikai lánc. Tipikus probléma: a Delphi-kliens „Hiba mentéskor”-t jelez, a C#-szolgáltatás timeoutot tapasztal, az adatbázis zárolásokat jelez – közös összefüggés nélkül.

Gyakorlatban bevált megoldások:

  • Korrelációs ID-k minden kéréshez (Client → API → DB), hogy a logok összevonhatók legyenek.
  • Strukturált naplózás (kulcs/érték a sima szövegsorok helyett), hogy később lehessen szűrni.
  • Metrikák késleltetésre, hibaarányokra, sorhosszakra és erőforrás-használatra.
  • Hibaklasszifikáció: üzleti hibák (validáció) elkülönítve a technikai hibáktól (timeout, hálózat).

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

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

Delphi-állományoknál a történeti okokból az adat-hozzáférés nagy jelentőséggel bír. Ha még régi hozzáférési útvonalak, például a Borland Database Engine (BDE) vannak használatban, 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-Ablösung ekkor nem csupán modernizáció, hanem kockázatcsökkentés is.

Tipikus megoldás a BDE-Ablösung mit nativer Anbindung (modern adat-hozzáférési réteg a Delphi-ben), kombinálva olyan adatbázissal, amely üzemeltetési szempontból jól kezelhető (pl. PostgreSQL, SQL Server, MariaDB). Egy közös Delphi/C#-architektúrához két szempont különösen fontos:

  • Tranzakcióhatárok: Ki kezdeményezi/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ók során bevált a lépcsőzetes tervezés: először az illesztőprogram- és hozzáférési réteget modernizálni, majd az adatmodellt konszolidálni, végül az integrációs felületeket stabilizálni. Így a hibaforrások izolálhatók és a rollbackok reálissá válnak.

Release-menedzsment: különböző frissítési ciklusok összeegyeztetése

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

Gyakorlati következmények:

  • API visszafelé kompatibilitás kötelező, nem opcionális.
  • Feature Flags (funkcionális kapcsolók) segítenek új funkciókat szerveroldalon kontrolláltan aktiválni.
  • Sémamigrációk fázisokban kell hogy fussanak: először az adatbázist bővíteni, majd a szolgáltatást használni, végül a kliens követni.
  • Világos deprekáció: régi végpontokat vagy mezőket csak egy definiált időszak után eltávolítani.

Különösen szabályozott környezetekben fontos ezeket a szabályokat írásban, architektúra-irányelvekként rögzíteni, hogy a döntéseket ne kelljen projekt szinten újra feltalálni.

Tipikus buktatók és hogyan lehet azokat rendszerszerűen elkerülni

Üzemeltetési szempontból a vegyes Delphi/C#-környezetek leggyakoribb problémái jól előre jelezhetők. Ha korán címezzük őket, a hosszú távú költségek érezhetően csökkennek.

Buktató 1: duplikált üzleti logika

Ha a Delphi-kliens és a C#-szolgáltatás ugyanazokat a szabályokat különböző módon valósítja meg, „rejtett hibák” keletkeznek: egy folyamat működik a UI-ban, de az API-importnál megbukik. Ellenintézkedés: a szabályokat központosítani a doménrétegben (szolgáltatás), vagy szakmailag egyértelműen hozzárendelni, beleértve az egyértelmű érvényesítési válaszokat.

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

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

Buktató 3: üzemeltetésben tisztázatlan felelősségek

Ha nem egyértelmű, hogy melyik csapat melyik szolgáltatásért, melyik logért és mely üzemeltetési paraméterért felel, a hibakeresés pingpongozásba fullad. Gyakorlati segítséget nyújt egy szolgáltatásterkép (mely szolgáltatás, milyen függőségek, mely portok, milyen belső SLA-k) és egységes runbookok a gyakori meghibásodásokhoz.

Buktató 4: hiányzó biztonsági következetesség

Egy portál SSO-val, de egy asztali kliens helyi adminisztrátori fiókokkal sok auditnál problémát jelent. Egy közös identitás- és szerepkörmodell csökkenti a kockázatot és a support terheit.

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

A racionális felosztás kevésbé ideológiától, mint inkább a folyamatközelsé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), nagyon gyors reagálást igénylő UI-folyamatok, offline-közeli forgatókönyvek, hosszú távú karbantartást igénylő, érett felületek.
  • C# gyakran alkalmas: központi REST-API-k, ERP/DMS/CRM integrációs szolgáltatások, identitáshoz kapcsolódó komponensek, portálok és olyan backend-folyamatok, amelyeknél gyakoriak a változtatások.
  • Tudatos döntés: az adatlogika és az érvényesítés nem maradhat „a kliensben”, ha több frontend létezik (asztali, portál, importfeladatok).

Fontos: a cél nem az, hogy „mindent áttelepítsünk C#-be”, hanem egy megbízható teljes architektúra, amelyben a modernizációs lépések tervezhetők és a vállalati folyamatok stabilan működnek.

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

Gyakorlatban a közös architektúra gyakran átmenet, de hosszú. Egy reális modernizációs útvonal elkerüli a magas kockázatú nagyszabású projekteket, és mérhető köztes célokra épít:

  1. Interfészek stabilizálása: REST-API bevezetése mint szakmai határvonal, még akkor is, ha belsőleg nem minden tökéletes.
  2. Adathozzáférés modernizálása: BDE-Ablösung, illesztőprogramok, 64 bites támogatás, egyértelmű tranzakciók.
  3. Identitás központosítása: SSO és szerepkörmodell minden hozzáférési útvonalra.
  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. Szakmai modulok leválasztása: különösen a változásoknak kitett részek szolgáltatásokba áthelyezése, a UI fokozatos egyszerűsítése.

Ez a sorrend nem dogmatikus, de általában minimalizálja a függőségeket: stabil interfészek és üzemeltetési koncepció nélkül minden további változtatás drágább lesz.

Következtetés: Az integráció architekturális feladat, nem nyelvkérdés

Egy fenntartható kombináció Delphi és C# között nem „hídkönyvtárakon” alapul, hanem világos szakmai határvonalakon, tisztán definiált adatszerződéseken és egy olyan üzemeltetési koncepción, amely komolyan veszi a monitoringot, a biztonságot és a release-menedzsmentet. 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 elsősorban egyet nyernek: modernizációt folyamatos folyamatmegszakítás nélkül. Delphi továbbra is megbízhatóan képes támogatni stabil asztali munkafolyamatokat, míg a 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 szeretne lépésről lépésre modernizálni, vagy C#-szolgáltatásokat tisztán csatolni, egy architektúra‑review az interfészekre, adatokra, üzemeltetésre és biztonságra fókuszálva a leggyorsabb út a megalapozott döntésekhez. Több erről személyes egyeztetésben:

A szakmai környezetben szintén fontos szerepet játszanak a Delphi modernizáció és a REST-API a meglévő szoftverek esetében, amikor az integrációknak, az adatáramlásoknak és a további fejlesztésnek zökkenőmentesen kell együttműködniük.

Projekt vagy modernizációs terv megbeszélése Net-Base részvételével.

Következő lépés

Ha a téma valós projektté válik, az architektúrát, a meglévő rendszert és az üzemeltetést már korán együtt kell értékelni.

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és, a portálok és a Rollout nem kerülnek utólagos teendőkként elhalasztásra.
  • Már korán láthatja, melyik út gazdaságilag és üzemeltetési szempontból életképes.

Bejegyzés megosztása

Ezt a bejegyzést közvetlenül megosztani

LinkedIn, X, XING, Facebook, WhatsApp és e-mail azonnal elérhetők. Instagramhoz linket és rövid szöveget közvetlenül előkészítünk.

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.