Net-Base Časopis

08.05.2026

Uređivanje klijent-poslužitelj arhitektura u Delphi: povratiti stabilnost, upravljivost i sučelja

Naslijeđeni Delphi-klijent-poslužiteljski sustavi često su poslovno kritični – a istovremeno teško održivi. Članak prikazuje praktično kako razdvojiti odgovornosti, stabilizirati pristupe podacima, modernizirati sučelja i osigurati rad sustava, bez rizičnog...

08.05.2026

Od teme magazina do projektne prakse

Povezane stranice usluga i tehnologije za članak

Tko želi urediti Client-Server arhitekture u Delphi, rijetko ima „loš“ sustav pred sobom. Često se radi o robusnom poslovnom softveru koji je tijekom godina proširen, pokriva mnoge posebne slučajeve i u svakodnevnoj upotrebi radi pouzdano. Problem ne proizlazi iz Delphi kao platforme, nego iz naraslih odgovornosti: klijent iznenada sadrži logiku podataka, „poslužitelj“ je u praksi samo baza podataka, a sučelja su dodavana ad hoc. To se osveti kad se pojave novi sigurnosni zahtjevi, promjena baze podataka, Homeoffice-VPN, Terminalserver konfiguracije ili integracije s ERP-om, DMS-om ili portalima.

Ovaj članak pokazuje kako u praksi strukturirano očistiti Delphi Client-Server krajolike: bez dogmatskog potpunog novoggrađenja, ali s jasnim ciljevima za rad, administraciju, konzistentnost podataka, sposobnost integracije i održivost. U fokusu su odluke koje mogu upravljati IT-uprava i tehnički voditelji projekata: granice arhitekture, strategije roll-outa, logiranje, koncepti prava, migracijski putevi i tipični izvori rizika.

Kako prepoznati da je Client-Server arhitektura „isprepletena“

Tehnički dugovi u radu obično se pokažu prije nego u izvornom kodu. Tipični signali nisu toliko „loš kod“ koliko ponavljajući točkasti problemi između klijenta, baze podataka i infrastrukture:

  • Neprecizne odgovornosti: klijent „zna“ previše o tablicama, triggerima, Stored Procedures ili čak putanjama datoteka na dijeljenim resursima.
  • Teški release-i: svaka sitna promjena zahtijeva roll-out klijenta na mnogim radnim mjestima, često s ručnim postupcima.
  • Nestabilni pristupi podacima: povremeni deadlockovi, nekonzistentne transakcije ili „zaleđene“ brave u vršnim opterećenjima.
  • Sigurnost kao naknadna misao: pristupi bazi koriste preširoka prava; lozinke stoje u INI datotekama; segmentacija mreže naruši funkcionalnost.
  • Integracija skupo košta: Korisnički portal ili REST-API teško se naknadno ugrađuje jer su poslovna pravila distribuirana.
  • Teško otkrivanje grešaka: bez pouzdanog logiranja nije jasno nastaju li greške u klijentu, mreži, bazi podataka ili u nekom sučelju.

Ako se poklapa više od navedenih točaka, „čišćenje“ nije kozmetika, nego mjera za sigurnost poslovanja. Cilj nije perfekcija, nego sustav koji ostaje pouzdano promjenjiv.

Client-Server u Delphi: Što u radu zaista vrijedi

U mnogim Delphi okruženjima „Client-Server“ se implicitno razumije kao „klijent govori izravno s bazom podataka“. To može funkcionirati – dok se okvirni uvjeti ne mijenjaju. Za poduzeća su međutim bitna druga svojstva:

  • Skalabilnost u praksi: ne sjajni benchmarkovi, nego stabilne performanse pri tipičnim vršnim opterećenjima (mjesečno zatvaranje, smjena, uvozni poslovi).
  • Promjenjivost: prilagodbe bez lančane reakcije roll-outa, migracije podataka i obuke.
  • Siguran rad: jasno utvrđena prava, auditabilnost, uredno upravljanje tajnama (credentials), mrežne granice.
  • Sposobnost integracije: definirana sučelja umjesto „drugog klijenta“ koji se također veže izravno na tablice.

Ove ciljeve moguće je postići bez potpunog zamjenjivanja Delphi. Ključno je kako postavljate granice: što je UI, što je poslovna logika, što je pristup podacima, i preko kojih sučelja se drugi sustavi smiju priključivati?

Uređivanje klijent-poslužitelj arhitektura u Delphi: ciljno stanje umjesto Big Banga

Praktično ostvarivo ciljno stanje rijetko je radikalan rez. Dokazalo se inkrementalno postupanje s jasnim arhitektonskim okvirom. Često se to provodi kao Layer-3-arhitektura: tri sloja s jasnim odgovornostima. „Layer“ ovdje znači: definirano razdvajanje UI (prezentacija), poslovne logike (pravila/slučajevi upotrebe) i pristupa podacima (SQL, transakcije, perzistencija). To se može strukturirati i unutar Delphi-monolita prije nego što izdvojite pravi servis.

Korak 1: Učinite arhitektonske granice vidljivima

Prije nego što preuređujete, morate znati gdje nastaje povezanost. Tipične povrede granica u Delphi-klijentima su:

  • UI-događaji (klik na gumb) sadrže SQL ili izravne pristupe tablicama.
  • Poslovna pravila su razbacana: dijelom u klijentu, dijelom u okidačima, dijelom u izvješćima ili skriptama za uvoz.
  • Veze prema bazi podataka se otvaraju svugdje „usput“, s različitim parametrima.

Cilj je pregledno jezgro: malo ulaznih točaka u poslovne funkcije i centralizirani pristup podacima koji dosljedno upravlja vezama, transakcijama i rukovanjem greškama.

Korak 2: „Ugovore“ definirati – čak i bez servisa

Mnogi timovi vjeruju da sučelja nastaju tek s REST. U stvarnosti prvo trebate interne ugovore: koje funkcije postoje, koji se parametri prosljeđuju, koji su kodovi pogrešaka dopušteni, koje transakcije pripadaju zajedno? Ti ugovori mogu se isprva pojaviti kao jasno definirani moduli/komponente u Delphi-projektu. Kasnije ih je relativno jednostavno prenijeti u REST-server ili u Windows- odnosno Windows- i Linux-servisi.

Stabilizacija pristupa podacima: FireDAC, transakcije i jasna strategija povezivanja

Pristup podacima u klijent-poslužitelj okruženjima često je najveći poluga za stabilnost. Dva područja dominiraju: dosljedne veze i čiste granice transakcija. U Delphi-okruženjima je BDE-zamjena s nativnim povezivanjem (biblioteka za pristup podacima s drajverima i connection poolingom) često oslonac modernizacije, osobito ako se još koristi BDE (Borland Database Engine, stariji sloj za pristup podacima).

BDE-zamjena: Više od promjene drajvera

Podcjenjuje se BDE-zamjena ako je shvatite kao „zamjenu komponenti“. U praksi ona pogađa:

  • SQL-dijalekt i parametrizacija: Različite baze podataka i drajveri različito reagiraju na formate datuma, rukovanje NULL vrijednostima, sortiranje i skupove znakova.
  • Ponašanje transakcija: Autocommit, razine izolacije (pravila kako strogo se upravlja zaključavanjima/čitanjem) i oporavak od pogrešaka.
  • Učinkovitost i zaključavanja: Neke stare logike nesvjesno se oslanjaju na implicitne mehanizme zaključavanja.

Operativno je važno imati testni koncept koji ne samo da „proklikava maske“, već simulira tipične postupke knjiženja i uvoza pod opterećenjem.

Transakcije: manje magije, više pravila

U mnogim naslijeđenim Delphi-klijentima transakcije nastaju slučajno: jedan obrazac sprema više tablica, ali se greške ne poništavaju ispravno. To dovodi do parcijalnih stanja koja se kasnije moraju „ručno očistiti“. Bolje je konzistentan obrazac:

  • Transakcija po poslovnom postupku (npr. „kreiranje naloga“, „knjiženje primitka robe“), a ne po SQL-upitu.
  • Jasni putevi greške: Kod validacijskih pogrešaka ne smije ostati djelomično stanje podataka, nego treba biti kontrolirani prekid.
  • Idempotentnost pri uvozima: ponovljivo unosivanje bez duplih knjiženja.

Za IT-drift i podršku najvažnije je: kad postupak zakaže, mora se moći rekonstruirati zašto je zakažio – s log-zapisima, korelirajućim ID-evima i jasnom klasom poruke o grešci (npr. ovlaštenje, sukob podataka, tehnička pogreška).

Izvlačenje poslovne logike iz klijenta – bez narušavanja upotrebljivosti

Mnogi Delphi-klijenti su povijesno izrasli kao „UI-centrični“: tok je u formama, validacije u OnChange-događajima, nuspojave u OnExit. To s korisničkog stajališta često radi brzo i izravno – iz arhitekturne perspektive je međutim teško testirati i proširivati.

Use-Cases statt Formularlogik

Praktičan međukorak je grupiranje u stručne Use-Cases: Use-Case kapsulira postupak (npr. „odobriti račun“) uključujući validacije, izračune, pristup podacima i logiranje. UI ga poziva i prikazuje rezultate, umjesto da sama implementira pravila. Prednost: kasnije se isti Use-Case može koristiti preko REST-API-ja, npr. za portal ili servis za uvoz.

Centralizirati pravila: validacija, rasponi brojeva, modeli stanja

Tipični kandidati za centralizaciju su:

  • Pravila validacije (obavezna polja, rasponi vrijednosti, plauzibilnosti)
  • Rasponi brojeva (dokumenti, serije, postupci) s mehanizmima za izbjegavanje konflikata
  • Modeli stanja (Nacrt → provjereno → odobreno → knjiženo) s dopuštenim prijelazima
  • Provjere ovlaštenja blizu poslovne operacije, ne samo u UI

Posebno je važno kod ovlaštenja: ako su pravila samo u klijentu, teško ih je dosljedno održavati za sučelja, automatizacije ili buduće portale.

Postati prikladan za integracije: REST-API kao kontrolirani pristup, a ne „drugi put“

Mnoge tvrtke trebaju integraciju: podaci za BI, povezivanje s ERP/DMS/CRM, automatizacija uvoza/izvoza ili korisnički portal. Tipična greška je izgraditi REST-API „sa strane“ koja izravno pristupa tablicama, jer je to brzo. To stvara dvije istine: logika klijenta i logika API-ja divergiraju, a konzistentnost podataka postaje slučajnost.

REST kao fasada ispred stabilnih Use-Cases

Jedna REST-API (HTTP-bazirano sučelje, uglavnom JSON) trebala bi nuditi poslovne operacije, a ne zrcaliti tablice. Primjeri su: „kreiranje naloga“, „dohvat statusa“, „učitavanje dokumenta uz postupak“. API poziva iste Use-Cases koje koristi i klijent. Time smanjujete duplicirane pravila i uspostavljate jasnu politiku upravljanja: vanjski sustavi dobivaju kontrolirani pristup koji se može verzionirati i osigurati.

Sigurnost i upravljanje API-jem

Iz B2B-perspektive manje su zanimljive krajnje točke, a važniji su rad i osiguranje:

  • Autentikacija: npr. postupci temeljeni na tokenima; u poslovnim okruženjima često povezivanje s centralnim identitetima (SAML 2.0 je raširen standard za jedinstvenu prijavu (Single Sign-on)).
  • Autorizacija: prava po operaciji, ne samo „smije koristiti API“.
  • Ograničenja brzine i zaštita od zloupotrebe: važno kod partnerskih pristupa.
  • Verzioniranje: planirane promjene bez tihih prekida.

Ako već planirate modernizaciju sučelja, isplati se pogledati strukturirani pristup za naknadno uvođenje REST-API-ja u postojeći softver: to olakšava prioritizaciju i smanjuje operativne rizike.

Deployment i sposobnost ažuriranja: tihi pokretač troškova

Mnogi Delphi-sustavi ne propadaju zbog funkcionalnosti, nego zbog rollout-procesa. „Client-Server“ u praksi znači: mnogobrojna radna mjesta, različite dozvole, ponekad Terminalserver ili Citrix, te udaljene lokacije preko VPN-a. U uređenom sustavu postoji definirana strategija ažuriranja.

Standardizacija: konfiguracija, verzije, okruženja

Tipične mjere koje odmah djeluju u radu:

  • Konfiguracija iz binarnog paketa: odvojene konfiguracijske datoteke ili centralni izvori konfiguracije, kako ažuriranja ne bi prepisivala postavke.
  • Profili okruženja: Test, Staging, Produkcija s jasno odvojenim krajnjim točkama za bazu podataka i servise.
  • Automatizirana instalacija: ponovljivo, također za slike Terminalservera.

Važno: Čak i ako je klijent „samo“ desktop-program, imate koristi od releasne discipline kao kod serverskih servisa: verzioniranje s mogućnošću vođenja changeloga, opcije rollbacka i definirani koraci migracije.

Migracije baze podataka: planirano umjesto rizično

Pri svakoj strukturnoj promjeni tablica, indeksa ili pogleda mora biti jasno: koja verzija aplikacije očekuje koju shemu? Uređen pristup koristi:

  • Verzionirani migracijski skripti po izdanju
  • Unatrag kompatibilne faze prijelaza, kad rollout klijenta ne može biti proveden istovremeno
  • Jasne strategije povrata (Backup, obnova, definirani vremenski prozori zastoja)

To nije svrha sama po sebi: bez te discipline poboljšanja arhitekture u svakodnevnom radu postaju „previše rizična“ i ostaju neprovedena.

Logiranje, monitoring i otklanjanje pogrešaka: bez telemetrije nema stabilnosti

„Rijetko se događa, ali kad se dogodi, sve stane“ je upozoravajući znak. Postojeći Client-Server sustavi često imaju nedostatno logiranje, osobito preko granica sustava. Za operativne timove ključno je da se slučaj pogreške može rekonstruirati vremenski i funkcionalno.

Što bi se u praksi trebalo logirati

  • Korelacija: ID procesa koja povezuje klijent, servis i operacije baze podataka
  • Kontekst: korisnik, mandant (tenant), uređaj/lokacija, verzija, pogođena operacija
  • Tehnički detalji: kodovi pogrešaka baze podataka, informacije o timeoutima, ponovni pokušaji
  • Sigurnosno relevantno: neuspjele prijave, kršenja prava, sumnjivi obrasci poziva

Važno je razdvajanje tehničkih logova i stručnih protokola. Stručni protokol (npr. „Dokument odobrio korisnik X“) često je relevantan za reviziju; tehnički logovi služe za analizu pogrešaka i trebali bi biti adekvatno zaštićeni i rotirani.

Mreža, sigurnost i prava: Od „radi u LAN-u“ do „radi u poduzeću“

Mnogi Delphi-Client-Server sustavi dizajnirani su u vremenima kada je „u LAN-u“ značilo „pouzdano“. Danas vrijede: segmentacija, Zero-Trust pristupi, VPN, MFA i restriktivna pravila vatrozida. Raščišćavanje arhitekture stoga je i sigurnosni zadatak.

Prava pristupa bazi podataka: Prinzip minimalnih prava

Čest naslijeđeni stanje je korisnik baze podataka s širokim pravima kojeg koriste svi klijenti. Bolje je:

  • Prava temeljena na ulogama po funkcionalnom području
  • Odvojeni pristupi za klijenta, servise, batch-poslove
  • Nema administratorskih prava u produkcijskim pristupima za svakodnevne operacije

Na taj se način ograničavaju posljedice pogrešaka i auditi postaju znatno manje opterećujući. Istovremeno rastu transparentnost i mogućnost dijagnoze, jer pogreške u pravima više neće nastupati „slučajno“.

Tajne i konfiguracija: Kraj lozinki u čistom tekstu

Podaci za prijavu u INI-datotekama ili u Registryju su klasika. Ovisno o okruženju, dolaze u obzir centralni secret-storeovi, šifrirana konfiguracija ili barem operativni koncepti s restriktivnim pravima datoteka. Ključna stvar je: rješenje mora ostati administrativno upravljivo. Sigurnost koja se u svakodnevnom radu zaobilazi, nije sigurnost.

Postupna modernizacija: gdje započeti kad sve izgleda važno?

Prioriteti odlučuju hoće li raščišćavanje zapeti nakon dva mjeseca ili donijeti mjerljivo rasterećenje. Dokazana je slijednost koja prvo adresira operativnu sigurnost, a zatim povlači poboljšanja strukture.

Pragmatski plan modernizacije

  1. Stabilizirati ponašanje transakcija i grešaka: manje korupcije podataka, manje „ručnih popravaka“.
  2. Centralizirani pristup podacima: jedinstvena konfiguracija veza, timeouti, ponovni pokušaji (retries), logiranje.
  3. Konsolidirati Use-Cases: izvući kritične osnovne procese iz UI.
  4. Definirati sučelje prema van: REST-API ili servisna fasada za integraciju, bez izlaganja tablica.
  5. Profesionalizirati deployment: reproducibilna ažuriranja, verzionirane DB-migracije.
  6. Security-hardening: prava, secrets, mrežne granice, mogućnost audita.

Ovaj redoslijed nije dogmatski, ali osigurava da su rani koraci odmah opipljivi u radu i da kasniji koraci postanu lakši.

Tipične prepreke iz perspektive projekta – i kako ih izbjeći

Pri raščišćavanju projekti rijetko propadaju zbog tehnike, već zbog okolnosti. Neke prepreke pojavljuju se posebno često:

„Uz rad“ preinake bez sigurnosne mreže

Ako mjere arhitekture idu paralelno s funkcionalnim izmjenama, često nedostaje sigurnosna mreža. Najmanje što je potrebno su reproducibilni testni podaci, definirani smoke-testovi za ključne procese i release-proces koji rollback ne smatra porazom, već alatom za rad u proizvodnji.

Dva modela podataka istovremeno

Tko gradi nove module, ali stare maske i dalje dopušta izravan pristup tablicama, brzo dobiva nekonzistentna pravila. Bolje: definirati jasna prijelazna pravila. Ili područje ostane privremeno „staro“ i ne modernizira se paralelno, ili se dosljedno vodi preko novog sloja.

Integracija bez upravljanja

Kada se povežu partneri ili interni sustavi, nastaju ovisnosti. Bez verzioniranja, testova ugovora i definirane strategije zastarijevanja svaka promjena postaje petlja usklađivanja. To je manje problem developera nego problem arhitekture i operacija.

Zaključak: Raščišćavanje znači ponovno uspostaviti kontrolu nad radom i promjenama

Ako raščistite Client-Server arhitekture u Delphi, nije riječ o „modernizaciji radi moderne“. Radi se o strukturiranju poslovno-kritičnog digitalnog rješenja poduzeća tako da operacije, sigurnost i daljnji razvoj ostanu planirani i upravljivi. Najjače poluge su obično nespektakularne: jasni slojevi, dosljedan pristup podacima, čiste granice transakcija, pouzdano logiranje i strategija sučelja koja ne duplicira pravila.

Ključna je metoda: inkrementalno, s ciljnim prikazom i prioritetizacijom koja prvo stvara stabilnost. Tako možete modernizirati postojeće Delphi-okruženje bez ugrožavanja svakodnevnog poslovanja – i bez prisile na rizičan potpuni novi početak.

Ako želite pragmatično procijeniti sljedeće korake za svoju arhitekturu, pristupe bazi podataka i sučelja, razgovarajte s nama:

U stručnom kontekstu važnu ulogu ima i Delphi Modernizacija, kada integracije, tokovi podataka i daljnji razvoj moraju besprijekorno surađivati.

Razgovarajte o projektu ili planu modernizacije s Net-Base.

sljedeći korak

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

Podržavamo vas ne samo u pojedinačnim pitanjima, već i kada iz isječaka izvornog koda, naslijeđenih sustava ili ideja za portale treba nastati pouzdan poslovni projekt.

  • Postojeće stanje, ciljna slika i tehnički rizici procjenjuju se zajedno.
  • REST, pristup podacima, portali i rollout neće biti odgođeni kao naknadne posljedice.
  • Rano prepoznajete koji je put ekonomski i operativno održiv.

Podijeli objavu

Izravno proslijedite ovu objavu

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

E-pošta

Instagram se otvara u novoj kartici. Link i kratki tekst se prethodno kopiraju u međuspremnik.