Net-Base Časopis

07.06.2026

C# i Delphi u zajedničkoj arhitekturi: pragmatična integracija umjesto pristupa ili-ili

Mnoge kompanije održavaju naslijeđene Delphi-desktop aplikacije i paralelno grade nove C#-servise i portale. Članak pokazuje kako C# i Delphi u zajedničkoj arhitekturi rade skladno: kroz jasne slojeve, stabilne interfejse, zajedničke...

07.06.2026

Od teme magazina do projektne prakse

Povezane stranice usluga i tehnologije za članak

U mnogim IT-odjeljenjima početna situacija je slična: stabilna, procesno-bliska Delphi-desktop aplikacija podržava kritične tokove, dok novi zahtjevi guraju ka webu, portalima, mobilnoj upotrebi i integraciji s cloud-servisima. Istovremeno je C# u mnogim preduzećima uspostavljen kada je riječ o servisima, Web-API-ima i Identity-integraciji. Zato centralno pitanje više nije „Delphi ili C#?“, nego: C# i Delphi u zajedničkoj arhitekturi tako kombinirati da upravljanje radom, održavanje, pohrana podataka i sigurnost ostanu pod kontrolom.

Ovaj članak opisuje praktične arhitektonske principe koji se pokazuju kao održivi u poslovnim okruženjima u kojima se ne može ili ne treba sve iznova graditi. Fokus je na jasnim odgovornostima između desktop-klijenta, servisa, podataka i sučelja – i na tome kako planirati korake modernizacije s niskim rizikom, bez ugrožavanja tekućih procesa.

Zašto su mješoviti tehnološki stackovi u preduzećima uobičajeni

Rastuće digitalne poslovne solucije rijetko nastaju na „zelenom polju“. Delphi-aplikacije su često tokom mnogo godina proširivane, blisko poslovnim procesima, s opsežnom logikom podataka i dubokim znanjem o izuzetnim slučajevima. Paralelno su se pojavili novi zahtjevi: Self-Service-portali, automatizirana razmjena podataka, povezivanje DMS/CRM/ERP, podrška za više klijenata (multi-tenancy), veća auditabilnost ili Single Sign-on.

C# u tom kontekstu često nudi prednosti za web- i servis-ecosisteme: širok spektar hostinga, standardizirana middleware, dobra integracija u Identity Provider-e i etablirani obrasci za Web-API-e. Delphi ostaje snažan tamo gdje su u pitanju performantni Windows-desktop-klijenti, dugoročno održavane VCL-aplikacije ili specifični multiplatform-klijenti (npr. preko FMX).

Zbog toga mješavina nije „izuzetak“, nego realističan odgovor na zaštitu investicija i pritisak za modernizacijom. Ključno je da zajedničko upravljanje ne postane trajna gradilišna situacija.

Arhitektonski princip: jasni slojevi umjesto tehnoloških granica

Kada se susretnu dvije programske tehnologije, velika je iskušenja organizirati razdvajanje po tehnologiji („Sve Delphi je legacy, sve C# je novo“). Tehnički to često kratkoročno funkcioniše, ali dugoročno dovodi do trenja: duplicirane poslovne logike, nejasne odgovornosti i teško reproducibilne greške.

Umjesto toga pokazala se djelotvornom funkcionalna slojevitost, često implementirana kao Layer-3 Architektur: prezentacija (UI), domena (poslovna logika) i infrastruktura (pristup podacima, eksterni sistemi). Poenta nije udžbenički model, nego konkretan utjecaj u svakodnevnom radu: odluke o podacima, validacijama i tokovima rada donose se na jednom mjestu i izlažu preko stabilnih sučelja.

U mješovitoj arhitekturi to u praksi znači: Delphi može i dalje isporučivati UI-dio (ili određene tokove rada), dok C# Services mogu kapsulirati funkcionalni domenski sloj – ili obrnuto. Važno je da je granica između slojeva tehnički čista i testabilna.

C# i Delphi u zajedničkoj arhitekturi: tri provjerena obrasca integracije

Za povezivanje Delphi i C# ne postoji „jedan“ ispravan put. Dobre odluke se usmjeravaju prema pogonu, sigurnosnim zahtjevima, latenciji, obimu podataka i ciklusima izdanja. U praksi su se iskristalisala tri obrasca.

1) Servisna orijentacija preko HTTP/REST kao standardna kopplung

Za najrobustniji pogon i dalji razvoj često se pokazuje veza putem REST-API-ja (HTTP-bazirane sučelja). Delphi-klijenti pozivaju C#- ili Delphi-servise; C#-portali koriste iste endpoint-e. Ova entkoppeling čini izdanja planiranijima: ažuriranje klijenta nije nužno ako API ostane unazad kompatibilan.

Važno je profesionalno oblikovanje: timeout-i, ponovni pokušaji, idempotencija (ponovljivi zahtjevi bez nuspojava), jasni kodovi grešaka i strategija verzionisanja. Za administraciju i pogon je također bitno: jedinstveni logovi, pratljive ID-ove zahtjeva i jasno mjerljivo vrijeme odgovora.

2) Zajednička baza podataka: samo uz jasna pravila

Zajednički pristup bazi podataka od strane Delphi i C# djeluje primamljivo jer je na početku brz. Dugoročno je rizičan ako oba svijeta direktno pišu u iste tabele. Razlog: poslovna pravila se premještaju u trigger-e, stored procedure ili „negdje u klijent“. To otežava analizu grešaka i audite.

Ako je zajednička baza neizbježna (npr. u fazama tranzicije), pomažu jasna pravila:

  • Centralizirati pristupe za pisanje: jedan sistem je „System of Record“ za određene entitete.
  • Definisati ugovore: view-ovi ili API-ji kao stabilni sloj za čitanje umjesto direktnih pristupa tabelama.
  • Planirati prozore migracije: promjene u bazi podataka uvijek uvesti unazad kompatibilno (npr. nove kolone prvo kao opcionalne).

Tehnički je baza podataka tada komponenta infrastrukture, a ne integracijski bus.

3) Messaging/Events za asinhrone procese

Za entkoppelte tokove (npr. importni poslovi, notifikacije, naknadna obrada, integracijski job-ovi) smislen je asinhroni model: jedan sistem objavi događaje, drugi ih obrađuje. To smanjuje direktne zavisnosti i stabilizira vršne opterećenja.

Za IT-upravljanje i administratore ovdje je bitno: monitoring (dužine reda), koncepti Dead-Letter (neuspjele poruke), ponašanje pri ponovnom pokretanju i jasna strukturna idempotencija. Events nisu zamjena za uredno vođenje master-podataka, ali su koristan alat za robusne procesne lance.

Ugovori o podacima i kompatibilnost: potcijenjena srž

Neovisno o obrascu integracije, kvalitet ugovora o podacima odlučuje o stabilnosti. Ugovor o podacima je obavezujući opis polja, tipova, obavezno/opsionalno i semantike. U REST-API-jima je to tipično JSON; važno nije „JSON samo po sebi“, već disciplina u upravljanju promjenama.

Provjerena pravila koja bitno pojednostavljuju rad:

  • Proširivati umjesto prekidati: dodavati nova polja, starija polja prvo i dalje isporučivati.
  • Dokumentovati semantiku polja: ne samo „string“, već npr. ISO-datum, vremenska zona, dozvoljena stanja.
  • Tretirati enum-vrijednosti tolerantno: klijenti moraju preživjeti nepoznate vrijednosti (forward-kompatibilnost).
  • Svjesno koristiti verzionisanje API-ja: nije svaki release razlog za novu verziju; ali nekompatibilne promjene moraju biti jasno ograničene.

Ove točke su naročito važne kada Delphi-desktop-klijenti ne mogu biti ažurirani tako često kao web-servisi.

Autentifikacija i autorizacija: zajednički sigurnosni model

Mješovite arhitekture rijetko zakažu zbog „tehnike“, češće zbog nekonzistentne sigurnosti. Za preduzeća je presudno: Ko smije šta? Kako se to provjerava? Kako se to audituje? Zajednički model izbjegava dvostruko upravljanje korisnicima i proturječne uloge.

U praksi to vodi ka centralnom sloju identiteta: npr. preko SAML 2.0 (federirano Single Sign-on, često u enterprise okruženju) ili OpenID Connect (bazirano na OAuth2, često za moderne Web-APIs). C#-Services obično se mogu direktno povezati na provajdera identiteta; Delphi-klijenti mogu preuzimati tokene i slati ih pri API-pozivima. Važno je da ni desktop-aplikacije ne dobiju „posebna prava“ putem pristupa bazi podataka.

Za administratore centralno:

  • Vrijeme života tokena i strategija osvježavanja (kako bi klijenti radili stabilno, a da pri tome ostanu sigurni)
  • Autentifikacija servis‑prema‑servisu za internu komunikaciju (npr. mTLS ili potpisani tokeni)
  • Least Privilege: uloge i dozvole ne smiju biti preširoko definirane
  • Audit-Logs: sigurnosno relevantne akcije moraju biti provjerljivo zabilježene

Betriebskonzepte: Windows- und Linux-Services, IIS und Prozesse im Alltag

Arhitektura u preduzeću je „dobra“ samo ako je operabilna: ažuriranja planirana, greške lokalizabilne, opterećenje pod kontrolom. U mješovitim okruženjima najčešći operativni modeli su:

  • Windows- und Linux-Services: pogodni za pozadinske zadatke, izvršavanje integracija i workere; dobro se integriraju u klasične Windows-serverske operativne modele.
  • Windows- und Linux-Services/Daemon: smisleno za containerizirane ili VM-bazirane modele rada; često stabilno u kontinuiranom radu, dobra automatizacija preko systemd.
  • Microsoft IIS: ustaljeno hostovanje za web-aplikacije i reverse-proxy scenarije u Windows-centriranim okruženjima.

Važno je da Delphi- i C#-komponente zadovoljavaju slične operativne standarde: konzistentni Health-Endpoints (indikatori stanja), definirani timeouti, ograničena potrošnja resursa, te jasan postupak za deployment i rollback. To smanjuje „technologiespezifische“ posebne tretmane.

Logging, Tracing und Metriken: ein gemeinsames Observability-Niveau

Pogotovo kod dva tehnološka stacka kontinuirani lanci dijagnostike su presudni. Tipičan problem: Delphi-klijent prijavljuje „Greška pri spremanju“, C#-servis ima timeout, baza podataka prijavljuje zaključavanja – bez zajedničkog konteksta.

Praktično se pokazalo sljedeće:

  • Korrelacijske ID-ove po zahtjevu (Klijent → API → DB), kako bi se logovi mogli objediniti.
  • Strukturirano logovanje (ključ/vrijednost umjesto čistih tekstualnih linija), da bi se kasnije moglo filtrirati.
  • Metrike za latenciju, stope grešaka, dužine queue-a i korištenje resursa.
  • Klasifikacija grešaka: poslovne greške (validacija) odvojeno od tehničkih grešaka (timeout, mreža).

Ove osnove štede u praksi više vremena nego bilo koja rasprava o „pravom jeziku“.

Pristup podacima i migracija: BDE-zamjena, FireDAC i moderne baze podataka

U Delphi-instalacijama pristup podacima historijski igra veliku ulogu. Gdje se još koriste stari pristupi poput Borland Database Engine (BDE), javlja se dodatni pritisak: nadogradnje operativnog sistema, prelazak na 64‑bit, dostupnost upravljačkih programa, sigurnosni zahtjevi. BDE-Ablösung tada nije samo modernizacija, već smanjenje rizika.

Tipično je prelazak na BDE-Ablosung mit nativer Anbindung (moderni sloj pristupa podacima u Delphi), kombiniran s bazom podataka koja je operativno lako upravljiva (npr. PostgreSQL, SQL Server, MariaDB). Za zajedničku Delphi/C#-arhitekturu važna su dva aspekta:

  • Granice transakcija: Ko pokreće/potvrđuje (commit) transakcije i kako se regulišu paralelni zapisni pristupi?
  • Strategija zaključavanja i izolacije: da se desktop radni tokovi i servisi međusobno ne blokiraju.

Pri migracijama se pokazuje uspješnim fazno planiranje: prvo modernizirati sloj upravljačkih programa i pristupa, zatim konsolidovati model podataka, potom stabilizovati integracijske interfejse. Tako se izvori grešaka mogu izolirati i rollback-ovi postaju realistični.

Release-Management: usklađivanje različitih ciklusa ažuriranja

Jedno ponavljajuće područje tenzije je frekvencija ažuriranja: web-servisi se mogu češće isporučivati, desktop-klijenti često rjeđe (prozor za rollout, komunikacija s korisnicima, pakovanje). Zajednička arhitektura mora uzeti u obzir ovu asimetriju.

Praktične posljedice:

  • Obrnuta kompatibilnost API-ja je obaveza, ne opcija.
  • Feature Flags (funkcionalni prekidači) pomažu da se nove funkcije serverski kontrolisano aktiviraju.
  • Migracije šeme moraju se izvoditi fazno: prvo proširiti bazu podataka, zatim servis početi koristiti, pa tek onda klijent ažurirati.
  • Jasna deprecacija: stare endpointi ili polja ukloniti tek nakon definisanog perioda.

Posebno u reguliranim okruženjima važno je ova pravila zapisati kao arhitektonske smjernice, kako se odluke ne bi iznova izmišljale po projektu.

Tipične prepreke i kako ih sistematski izbjeći

Iz operativnog ugla najčešći problemi u miješanim Delphi/C#-okruženjima su dobro predvidljivi. Ako se rješavaju rano, dugoročni troškovi značajno opadaju.

Prepreka 1: duplirana poslovna logika

Ako Delphi-klijent i C#-servis iste pravila različito implementiraju, nastaju „neuhvatljive greške“: proces radi u UI-ju, ali ne uspije pri API-importu. Protivmjera: centralizirati pravila u domenskom sloju (servis) ili ih stručno jasno dodijeliti, uključujući nedvosmislene odgovore za validaciju.

Prepreka 2: UI-zaobilazna rješenja umjesto čistih interfejsa

„Brzo upisati polje u bazu podataka“ na pojedinačnom slučaju izgleda bezopasno, ali stvara sjenovite interfejse bez logovanja, autentikacije i verzionisanja. Bolje: dosljedno koristiti definisane endpointe, čak i ako to inicijalno zahtijeva više discipline.

Prepreka 3: nejasne odgovornosti u operacijama

Ako nije jasno koji tim je odgovoran za koji servis, koji log i koje operativne parametre, potraga za greškama završi kao ping-pong. U praksi pomaže karta servisa (koji servis, koje ovisnosti, koji portovi, koje interne SLA) i jedinstveni runbookovi za česte kvarove.

Zamka 4: nedostatak sigurnosne konzistentnosti

Portal sa SSO, ali desktop-klijent sa lokalnim administratorskim nalozima predstavlja problem u mnogim auditima. Jedinstveni model identiteta i uloga smanjuje rizik i opterećenje podrške.

Entscheidungshilfe: Was bleibt in Delphi, was geht in C#?

Smislena podjela ovisi manje o ideologiji, a više o blizini procesa i operativnim zahtjevima. Kao orijentacija iz arhitekturnog i operativnog ugla:

  • Delphi ist häufig gut für: postojeće Windows-desktop-klijente (VCL), vrlo responzivni UI-Workflows, scenariji bliski offline radu, dugoročno održavanje uhodanih sučelja.
  • C# ist häufig gut für: centralne REST-APIs, integracijski servisi prema ERP/DMS/CRM, komponente bliske identitetu, portali i backend-procesi s visokom frekvencijom promjena.
  • Svjesno odlučiti: podatkovna logika i validacija ne bi trebale ostati „u klijentu“, ako postoji više frontenda (Desktop, Portal, Importjobs).

Važno: cilj nije „sve u C#“, već robusna ukupna arhitektura u kojoj su koraci modernizacije planirani i poslovni procesi stabilno teku.

Modernisierungspfad: Schrittweise von der Anwendung zum System

U praksi je zajednička arhitektura često prijelaz, ali dugotrajan. Realističan put modernizacije izbjegava velike projekte visokog rizika i oslanja se na mjerljive međuciljeve:

  1. Stabilizirati sučelja: REST-API uvesti kao funkcionalnu granicu, čak i ako interno još nije sve „lijepo“.
  2. Modernizirati pristup podacima: BDE-zamjena, drajveri, 64‑bit podrška, jasne transakcije.
  3. Centralizirati identitet: SSO i model uloga za sve načine pristupa.
  4. Ujednačiti operacije: Logging/Monitoring/Health, jasni deployumenti, reproducibilna okruženja.
  5. Funkcionalne module razdvojiti: posebno dijelove s visokom stopom izmjena preseliti u servise, UI postupno pojednostavljivati.

Ovaj redoslijed nije dogmatski, ali tipično minimizira ovisnosti: bez stabilnih sučelja i operativnog koncepta svaka daljnja promjena postaje skuplja.

Zaključak: Integration ist eine Architekturaufgabe, keine Sprachenfrage

Održiv spoj Delphi i C# ne nastaje kroz „biblioteke mostova“, već kroz jasne funkcionalne granice, čiste podatkovne ugovore i operativni koncept koji ozbiljno pristupa monitoringu, sigurnosti i upravljanju izdanjima. Ako C# und Delphi in einer gemeinsamen Architektur svjesno djeluju duž odgovornosti, kompanije prije svega dobijaju jedno: modernizaciju bez prekida procesa. Delphi može pouzdano nositi stabilne desktop-workflowove, dok C#-servisi pružaju integraciju, Web-APIs i portale kao centralne platformne funkcije.

Ako želite postupno modernizirati postojeće Delphi-okruženje ili uredno povezati C#-servise, arhitekturni review s fokusom na sučelja, podatke, operacije i sigurnost je najbrži put do pouzdanih odluka. Više o tome u direktnom razgovoru:

U stručnom okruženju također važnu ulogu imaju Delphi modernizacija i REST-API za postojeći softver, kada integracije, tokovi podataka i dalji razvoj moraju skladno surađivati.

Razgovarajte o projektu ili planu modernizacije sa Net-Base.

Sljedeći korak

Ako se tema pretvori u stvarni projekat, arhitekturu, postojeći sistem i operacije trebalo bi rano zajednički razmotriti.

Pružamo podršku ne samo pri pojedinačnim pitanjima, već i kada iz fragmenata izvornog koda, naslijeđenih sistema ili ideja za portal treba nastati robustan poslovni projekat.

  • Postojeće stanje, ciljno stanje i tehnički rizici procjenjuju se zajedno.
  • REST, pristup podacima, portali i Rollout neće se odgađati za kasnije faze.
  • Pravovremeno prepoznajete koji pristup je ekonomski i operativno održiv.

Podijeli objavu

Ovu objavu direktno proslijediti

LinkedIn, X, XING, Facebook, WhatsApp i e-pošta su odmah dostupni. Za Instagram pripremamo link i kratak tekst.

E-pošta

Instagram se otvara u novom tabu. Link i kratak tekst se prethodno kopiraju u međuspremnik.