Net-Base Revija

07.06.2026

C# in Delphi v skupni arhitekturi: pragmatična integracija namesto bodisi-ali

Mnoga podjetja upravljajo z zraslimi Delphi namiznimi aplikacijami in vzporedno gradijo nove C# storitve in portale. Članek prikazuje, kako C# in Delphi v skupni arhitekturi urejeno sodelujeta: prek jasnih plasti, stabilnih vmesnikov, skupnih...

07.06.2026

Od teme v reviji do projektne prakse

Ustrezne strani storitev in tehnični opisi k prispevku

V mnogih IT-oddelkih je izhodišče podobno: stabilna, procesno-povezana Delphi-namizna aplikacija podpira kritične procese, medtem ko nove zahteve pritiskajo v smer spletnih rešitev, portalov, mobilne rabe in integracije s storitvami v oblaku. Hkrati je C# v številnih podjetjih uveljavljen pri storitvah, spletnih API-jih in integraciji identitet. Osrednje vprašanje torej ni več „Delphi oder C#?“, temveč: kombinirati C# in Delphi v skupni arhitekturi tako, da sta obratovanje, vzdrževanje, hrambo podatkov in varnost obvladljiva.

Ta prispevek opisuje v praksi preverjena arhitekturna načela, ki se izkažejo v podjetniških okoljih, kjer ni mogoče ali smiselno vsega zgraditi znova. Poudarek je na jasnih odgovornostih med namiznim odjemalcem, storitvami, podatki in vmesniki – in na tem, kako načrtovati korake modernizacije z nizkim tveganjem, ne da bi ogrozili tekoče procese.

Zakaj so mešani tehnološki sklopi v podjetjih običajni

Razvite digitalne poslovne rešitve redko nastanejo na zelenem polju. Delphi-aplikacije so bile pogosto razširjane skozi leta, blizu poslovnim procesom, z obsežno podatkovno logiko in globokim znanjem o posebnih primerih. Paralelno so nastale nove zahteve: samoobslužni portali, avtomatizirane izmenjave podatkov, povezave s DMS/CRM/ERP, večstrankost, izboljšana revizijska sledljivost ali enotna prijava.

C# v tem kontekstu pogosto ponuja prednosti za spletne in servisne ekosisteme: širok spekter gostovanja, standardizirano middleware, dobra integracija s ponudniki identitet in uveljavljeni vzorci za spletne API-je. Delphi pa ostaja močan, ko gre za zmogljive Windows-namizne odjemalce, dolgoročno vzdrževane VCL-aplikacije ali specifične večplatformne odjemalce (npr. preko FMX).

Zato mešanica ni „Sonderfall“, ampak realističen odgovor na varovanje naložb in pritisk za modernizacijo. Ključno je, da skupno obratovanje ne postane stalno gradbišče.

Načelo arhitekture: jasne plasti namesto jezikovnih meja

Ko se srečata dva jezika, je skušnjava velika, da ločitev organiziramo po tehnologiji („Alles Delphi ist Legacy, alles C# ist neu“). Tehnično to pogosto deluje na kratek rok, vendar dolgoročno vodi do trenj: podvojena poslovna pravila, nejasne pristojnosti in težko reproducibilne napake.

Namesto tega se je izkazala strokovna ločitev, pogosto izvedena kot Layer-3 arhitektura: predstavitev (UI), domena (poslovna logika) in infrastruktura (dostop do podatkov, zunanji sistemi). Bistvo ni toliko učbenikarski model kot konkretni učinek v vsakdanjem delu: odločitve o podatkih, validacijah in potekih dela se sprejemajo na enem mestu in so na voljo preko stabilnih vmesnikov.

V mešani arhitekturi to praktično pomeni: Delphi lahko še vedno zagotavlja UI-del (ali določene poteke dela), medtem ko C# storitve inkapsulirajo strokovno domeno – ali obratno. Pomembno je, da je meja med plastmi tehnično čista in testno preverljiva.

C# und Delphi v skupni arhitekturi: trije preverjeni integracijski vzorci

Pri povezovanju Delphi in C# ne obstaja „ena“ pravilna pot. Dobre odločitve upoštevajo obratovanje, varnostne zahteve, latenco, količino podatkov in cikle izdaj. V praksi so se oblikovali trije vzorci.

1) Storitvena usmerjenost prek HTTP/REST kot standardna povezava

Za obratovanje in nadaljnji razvoj je pogosto najbolj robustna povezava preko REST-API-jev (HTTP-osnovani vmesniki). Delphi-klienti kličeta C#- ali Delphi-storitev; C#-portali uporabljajo iste končne točke. Ta razvezava naredi izide bolj načrtljive: posodobitev klienta ni nujno potrebna, če API ostane združljiv navzdol.

Pomembna je pri tem profesionalna zasnova: timeouti, ponovitve (retries), idempotenca (ponovljivi zahtevki brez stranskih učinkov), jasne kode napak in strategija verzioniranja. Za administracijo in obratovanje šteje tudi: enotni logi, sledljive Request-ID in dobro merljivi odzivni časi.

2) Skupna baza podatkov: le s jasnimi pravili

Skupen dostop do baze podatkov za Delphi in C# je mamljiv, ker je na začetku hiter. Na dolgi rok pa je tvegan, če obe strani neposredno pišeta v iste tabele. Razlog: poslovna pravila se preselijo v sprožilce (Trigger), shranjene procedure (Stored Procedures) ali nekje v klienta. To otežuje analizo napak in revizije.

Če je skupna baza neizogibna (npr. v prehodnih fazah), pomagajo jasna pravila:

  • Centrirati pisne dostope: en sistem je „System of Record“ za določene entitete.
  • Določiti pogodbe: pogledi ali API-ji kot stabilna plast za branje namesto neposrednih dostopov do tabel.
  • Načrtovati migracijska okna: spremembe v bazi vedno uvajati nazaj združljivo (npr. nove stolpce najprej kot opcijske).

Tehnično je baza podatkov potem infrastrukturna komponenta, ne integracijski bus.

3) Messaging/Events za asinhrone procese

Za razvezane poteke (npr. uvozni postopki, obvestila, naknadna obdelava, vmesniški jobi) je smiseln asinhroni model: en sistem objavi dogodke, drug jih obdela. To zmanjša neposredne odvisnosti in stabilizira obremenitvene vrhe.

Za IT-vodstvo in skrbnike je tukaj pomembno: monitoring (dolžine vrst), koncepti dead-letter (neuspešna sporočila), vedenje pri ponovnem zagonu in jasna strokovna idempotenca. Dogodki niso nadomestilo za urejeno upravljanje osnovnih podatkov, so pa učinkovito orodje za robustne procesne verige.

Pogodbe o podatkih in združljivost: premalo cenjeno jedro

Ne glede na integracijski vzorec kakovost pogodbe o podatkih odloča o stabilnosti. Pogodba o podatkih je zavezujoč opis polj, tipov, obvezno/opcionalno in semantike. V REST-API-jih je to tipično JSON; pomembno pri tem ni „JSON sam po sebi“, temveč disciplina pri ravnanju s spremembami.

Preizkušena pravila, ki opazno poenostavijo obratovanje:

  • Razširjati namesto prekinjati: dodajati nova polja, stare pa najprej še naprej vključevati.
  • Dokumentirati semantiko polj: ne le „string“, temveč npr. ISO-datum, časovni pas, dovoljena stanja.
  • Enum-vrednosti obravnavati tolerantno: klienti morajo prenesti neznane vrednosti (forward-Compatibility).
  • Zavedno uporabljati verzioniranje API-jev: ne vsaka izdaja potrebuje novo verzijo; spremembe, ki prekinjajo združljivost, morajo biti jasno zamejene.

Ti vidiki so še posebej pomembni, kadar Delphi-desktop-klienti ne morejo biti posodobljeni tako pogosto kot spletne storitve.

Overjanje in avtorizacija: skupen varnostni model

Zmešane arhitekture redko odpovejo zaradi »tehnike«, pogosteje zaradi neenotne varnosti. Za podjetje šteje: kdo sme kaj? Kako se to preverja? Kako se to revidira? Skupen model prepreči dvojno upravljanje uporabnikov in nasprotujoče si vloge.

V praksi to vodi do centralne plasti identitete: na primer preko SAML 2.0 (federirano enkratno prijavljanje, pogosto v podjetniškem okolju) ali OpenID Connect (na osnovi OAuth2, pogosto za sodobne spletne API-je). C#-Services lassen sich meist direkt an einen Identity Provider anbinden; Delphi-Clients können Tokens beziehen und bei API-Calls mitsenden. Pomembno je, da tudi namizne aplikacije niso dodeljene »posebne pravice« preko neposrednega dostopa do baze podatkov.

Za administratorje osrednje:

  • Življenjska doba tokenov in strategija osveževanja (da odjemalci delujejo stabilno in so hkrati varni)
  • Avtentikacija med storitvami za interno komunikacijo (npr. mTLS ali podpisani tokeni)
  • Načelo najmanjših pravic: vloge in dovoljenja ne smejo biti preveč grobo definirane
  • Revizijski zapisi: varnostno relevantne akcije protokolirati tako, da so sledljive

Koncepti obratovanja: Windows- und Linux-Services, IIS und Prozesse im Alltag

Arhitektura je v podjetju »dobra« le, če je obvladljiva: posodobitve načrtljive, napake locirljive, obremenitev obvladljiva. V mešanih okoljih so najpogostejše operativne variante:

  • Windows- und Linux-Services: primerne za ozadna opravila, zagon vmesnikov, workerje; dobro vključljive v klasične Windows-strežniške obratovalne modele.
  • Windows- und Linux-Services/Daemon: smiselne za containerizirane ali VM-bazirane modele obratovanja; pogosto stabilne v dolgotrajnem delovanju, dobra avtomatizacija preko systemd.
  • Microsoft IIS: uveljavljeno gostovanje za spletne aplikacije in reverse-proxy scenarije v Windows-centriranih okoljih.

Pomembno je, da Delphi- in C#-komponente izpolnjujejo podobne operativne standarde: konsistentni Health-Endpoints (signali življenja), definirani Timeouts, omejena poraba virov ter jasen postopek za deployment in rollback. To zmanjša »tehnološko specifične« posebne obravnave.

Dnevniško beleženje, sledenje in metrike: skupna raven opazljivosti

Pri dveh tehnoloških skladih so prehodne diagnostične verige ključne. Tipičen problem: Delphi-Client poroča »Fehler beim Speichern«, C#-Service ima timeout, baza podatkov poroča o zaklepih – brez skupne povezanosti.

V praksi se izkažejo:

  • ID-ji za korelacijo na zahtevo (Client → API → DB), da je mogoče združiti dnevnike.
  • Strukturirano beleženje (ključ/vrednost namesto prostega besedila), za lažje filtriranje.
  • Metrike za latenco, stopnje napak, dolžine čakalnih vrst in porabo virov.
  • Klasifikacija napak: poslovne napake (validacija) ločeno od tehničnih napak (timeout, omrežje).

Ta osnovna načela v praksi prihranijo več časa kot katera koli razprava o „pravem jeziku“.

Dostop do podatkov in migracije: BDE-zamenjava, FireDAC in sodobne baze podatkov

V Delphi-nasledjih ima dostop do podatkov zgodovinsko velik pomen. Kjer so še v uporabi stari načini dostopa, kot je Borland Database Engine (BDE), nastane dodaten pritisk: posodobitve operacijskega sistema, prehodi na 64‑bit, razpoložljivost gonilnikov, varnostne zahteve. BDE-zamenjava ni torej le modernizacija, ampak tudi zmanjšanje tveganj.

Običajen je prehod na BDE-zamenjava z nativno povezavo (sodobna plast dostopa do podatkov v Delphi), v kombinaciji z bazo podatkov, ki je operativno obvladljiva (npr. PostgreSQL, SQL Server, MariaDB). Za skupno Delphi/C#-arhitekturo sta pomembna dva vidika:

  • Meje transakcij: kdo zažene/zaključi (commit) transakcije in kako so urejeni vzporedni zapisi?
  • Strategija zaklepanja in izolacije: da namizni poteki dela in storitve ne blokirajo drug drugega.

Pri migracijah se izkaže fazno načrtovanje: najprej modernizirati gonilniško in dostopno plast, nato konsolidirati podatkovni model in šele nato stabilizirati integracijske vmesnike. Tako so napake izoliranih virov in vračila (rollbacks) realistična.

Upravljanje izdaje: uskladitev različnih ciklov posodobitev

Pogosto napetost povzroča frekvenca posodobitev: spletne storitve je mogoče pogosteje uvajati, namizni odjemalci pogosto redkeje (okna za razmestitev, komunikacija z uporabniki, paketiranje). Skupna arhitektura mora to asimetrijo upoštevati.

Praktične posledice:

  • API-nazaj združljivost je obvezna, ne opcija.
  • Feature flagi (funkcijska stikala) pomagajo nadzorovano aktivirati nove funkcije na strežniški strani.
  • Migracije sheme morajo potekati v fazah: najprej razširiti bazo podatkov, nato storitev začeti uporabljati nove strukture, nato prilagoditi odjemalce.
  • Jasna deprecacija: stare končne točke ali polja odstraniti šele po vnaprej določenem obdobju.

Še posebej v reguliranih okoljih je pomembno te rešitve pisno določiti kot arhitekturne vodilne smernice, da se odločitve ne izumljajo znova za vsak projekt posebej.

Tipične zagate in kako se jim sistematično izogniti

Iz vidika obratovanja so najpogostejše težave v mešanih Delphi/C#-okoljih dobro predvidljive. Če jih zgodaj naslovimo, se dolgoročni stroški občutno znižajo.

Stolperstein 1: podvojena poslovna logika

Če Delphi-odjemalec in C#-storitev iste pravilnike različno implementirata, nastajajo »duhovne napake«: postopek deluje v UI, vendar pri uvozu preko API ne uspe. Protistrup: pravila centralizirati v domenjski plasti (storitev) ali jih strokovno jasno dodeliti, vključno z enoznačnimi odgovori za validacijo.

Stolperstein 2: UI-obhodi namesto urejenih vmesnikov

»Hitro še v bazo zapisati polje« se v posameznem primeru zdi nenevarno, a ustvarja senčne vmesnike brez evidentiranja, avtentikacije in verzioniranja. Bolje: dosledno uporabljati definirane končne točke, tudi če to sprva zahteva več discipline.

Stolperstein 3: nejasne odgovornosti v obratovanju

Če ni jasno, katera ekipa je odgovorna za kateri servis, kateri dnevnik in katere obratovalne parametre, se iskanje napak konča v ping-pongu. V praksi pomaga karta storitev (kateri servis, katere odvisnosti, kateri porti, katere notranje SLA) in enotni runbooki za pogoste motnje.

Pasti 4: pomanjkanje doslednosti pri varnosti

Portal z SSO, medtem ko namizni odjemalec uporablja lokalne administratorske račune, je v številnih revizijah težava. Enoten model identity in vlog zmanjša tveganje in obremenitev podpore.

Pomoč pri odločitvi: Kaj ostane v Delphi, kaj gre v C#?

Smiselna delitev je manj odvisna od ideologije kot od procesne bližine in obratovalnih zahtev. Kot orientacija z vidika arhitekture in obratovanja:

  • Delphi je pogosto primeren za: obstoječe Windows namizne odjemalce (VCL), zelo odzivne UI-delovne tokove, scenarije, ki so blizu delovanju brez povezave, dolgoročno vzdrževanje uveljavljenih vmesnikov.
  • C# je pogosto primeren za: centralne REST-APIs, integracijske storitve za ERP/DMS/CRM, komponente, povezane z upravljanjem identitet, portale in backend-procese z visoko frekvenco sprememb.
  • Zavestna odločitev: podatkovna logika in validacija ne bi smeli biti „v odjemalcu“, če obstaja več front-endov (namizni odjemalec, portal, uvozni opravki).

Pomembno: Cilj ni „vse v C#“, ampak robustna skupna arhitektura, v kateri so modernizacijski koraki načrtljivi in poslovni procesi stabilno tečejo.

Modernizacijska pot: postopno od aplikacije k sistemu

V praksi je skupna arhitektura pogosto prehod, vendar dolgotrajen. Realistična pot modernizacije se izogiba velikim projektom z visokim tveganjem in temelji na merljivih vmesnih ciljih:

  1. Stabilizirati vmesnike: uvesti REST-API kot strokovno mejo, tudi če interno še ni vse „lepo“.
  2. Modernizirati dostop do podatkov: BDE-zamenjava, gonilniki, podpora za 64‑bit, jasne transakcije.
  3. Centralizirati upravljanje identitet: SSO in model vlog za vse poti dostopa.
  4. Poenotiti obratovanje: beleženje, monitoring, health checks, jasni deploymenti, reproduktivna okolja.
  5. Ločevanje funkcionalnih modulov: posebej dele z visoko spremembno občutljivostjo preseliti v storitve, uporabniški vmesnik (UI) postopoma poenostavljati.

Ta vrstni red ni dogmatičen, vendar običajno minimizira odvisnosti: brez stabilnih vmesnikov in obratovalnega koncepta bo vsaka nadaljnja sprememba dražja.

Zaključek: Integracija je arhitekturna naloga, ne vprašanje programskih jezikov

Vzdržna kombinacija Delphi in C# ne nastane z „mostnimi knjižnicami“, temveč z jasnimi strokovnimi mejami, čistimi podatkovnimi pogodbami in obratovalnim konceptom, ki resno jemlje monitoring, varnost in release management. Ko se C# in Delphi v skupni arhitekturi namerno uskladita po odgovornostih, podjetja pridobijo predvsem eno: modernizacijo brez prekinitve procesov. Delphi lahko še naprej zanesljivo podpira stabilne namizne delovne tokove, medtem ko C#-servisi zagotavljajo integracijo, spletne API-je in portale kot centralne funkcije platforme.

Če želite obstoječe Delphi-okolje postopoma modernizirati ali C#-servise kakovostno povezati, je arhitekturni pregled s fokusom na vmesnike, podatke, obratovanje in varnost najhitrejša pot do zanesljivih odločitev. Več o tem v neposrednem pogovoru:

V strokovnem okolju igrajo tudi Delphi modernizacija in REST-API pomembno vlogo, ko morajo integracije, podatkovni tokovi in nadaljnji razvoj delovati usklajeno.

Prediskutirajte projekt ali načrt modernizacije z Net-Base.

Naslednji korak

Ko se tema spremeni v dejanski projekt, je treba arhitekturo, obstoječi sistem in obratovanje zgodaj obravnavati skupaj.

Ne podpiramo le pri posameznih vprašanjih, ampak tudi takrat, ko iz izrezkov izvorne kode, legacy-tem ali idej za portale nastane zanesljiv podjetniški projekt.

  • Obstoječe stanje, ciljno stanje in tehnična tveganja se ocenjujejo skupaj.
  • REST, dostop do podatkov, portali in uvedba niso prestavljeni kot poznejše posledice.
  • Zgodaj prepoznate, katera pot je ekonomsko in obratovalno vzdržna.

Deli objavo

Deli ta prispevek neposredno

LinkedIn, X, XING, Facebook, WhatsApp in e-pošta so takoj na voljo. Za Instagram bomo neposredno pripravili povezavo in kratek opis.

E-pošta

Instagram se odpre v novem zavihku. Povezava in kratek opis se pred tem kopirata v odložišče.