Net-Base Revista

08.05.2026

Posar ordre a les arquitectures client-servidor a Delphi: recuperar l'estabilitat, l'operació i les interfícies

Els sistemes client-servidor Delphi consolidats sovint són crítics per al negoci — i alhora difícils de mantenir. L'article mostra de manera pràctica com separar responsabilitats, estabilitzar els accessos a les dades, modernitzar les interfícies i assegurar el funcionament, sense una mesura arriscada...

08.05.2026

Del tema de la revista a la pràctica del projecte

Pàgines de serveis i tècniques pertinents per a l'article

Qui vol posar en ordre arquitectures client-servidor a Delphi rarament té davant un sistema „dolent“. Sovint es tracta de software empresarial robust, ampliat durant anys, que reflecteix molts casos especials i funciona de manera fiable en el dia a dia. El problema no ve de Delphi com a plataforma, sinó de responsabilitats desenvolupades amb el temps: el client incorpora sobtadament lògica de dades, el „servidor“ és de fet només una base de dades i les interfícies s’han afegit de manera ad hoc. Això es paga quan sorgeixen nous requisits de seguretat, canvis de base de dades, VPN per a treball des de casa, configuracions de servidor de terminals o integracions amb ERP, DMS o portals.

Aquest article mostra com netejar paisatges client-servidor en Delphi a la pràctica: sense una reconstrucció total dogmàtica, però amb objectius clars per a l’explotació, l’administració, la consistència de dades, la capacitat d’integració i la mantenibilitat. L’enfocament està en decisions que la direcció de TI i els responsables tècnics de projecte poden governar: límits d’arquitectura, estratègies de desplegament, registratge, conceptes de permisos, rutes de migració i fonts de risc típiques.

Com es detecta que l’arquitectura client-servidor està „entrellaçada“

El deute tècnic acostuma a manifestar-se en l’explotació abans que en el codi font. Senyals típics no són tant un „codi dolent“ com punts recurrents de fricció entre client, base de dades i infraestructura:

  • Responsabilitats poc clares: el client „sap“ massa sobre taules, triggers, stored procedures o fins i tot rutes de fitxers en comparticions de xarxa.
  • Llançaments difícils: cada petit canvi requereix desplegament del client en molts llocs de treball, sovint amb passos manuals.
  • Accés a dades fràgil: interbloquejos aleatoris, transaccions incoherents o bloquejos „penjants“ en pics de càrrega.
  • Seguretat com a reflexió tardana: els accessos a la base de dades funcionen amb permisos massa amplis; contrasenyes emmagatzemades en fitxers INI; la segmentació de xarxa trenca funcionalitats.
  • La integració costa de manera desproporcionada: un portal de clients o una REST-API és difícil d’adaptar perquè les regles de negoci estan repartides.
  • Recerca d’errors difícil: sense un registratge fiable no queda clar si els errors són al client, a la xarxa, a la base de dades o en una interfície.

Si es compleixen diversos d’aquests punts, „posar en ordre“ no és cosmètica, sinó una mesura per a la seguretat operacional. L’objectiu no és la perfecció, sinó un sistema que continuï sent modificable de manera fiable.

Client-Server en Delphi: Què compta realment en l’explotació

En moltes implantacions Delphi „client-servidor“ s’entén implícitament com „el client parla directament amb la base de dades“. Això pot funcionar —mentre no canviïn les condicions marc—. Per a les empreses, però, compten altres propietats:

  • Escalabilitat en el dia a dia: no benchmarks espectaculars, sinó rendiment estable en pics típics de càrrega (tancament mensual, canvi de torn, execucions d’importació).
  • Facilitat de modificació: adaptacions sense una reacció en cadena de desplegament, migració de dades i formació.
  • Funcionament segur: permisos traçables, capacitat d’auditoria, gestió neta dels secrets (credencials), límits de xarxa definits.
  • Capacitat d’integració: interfícies definides en lloc d’un „segon client“ que també es connecta directament a les taules.

Aquests objectius es poden assolir sense Delphi „reemplaçar“. Decisiu és com traieu les fronteres: què és la UI, què és la lògica de negoci, què és l’accés a dades, i a través de quines interfícies poden connectar-se altres sistemes?

Posar en ordre les arquitectures client-servidor en Delphi: imatge objectiu en lloc d’un Big Bang

Una visió objectiu viable rarament implica un tall radical. S’ha demostrat eficaç un enfocament incremental amb un marc d’arquitectura clar. Sovint s’implementa això com una Layer-3-Arquitectura: tres capes amb responsabilitats ben definides. „Layer“ significa aquí: una separació definida de la UI (presentació), la lògica de negoci (regles/casos d’ús) i l’accés a dades (SQL, transaccions, persistència). Això es pot estructurar també dins d’un monolit de Delphi abans que extregueu un servei real.

Pas 1: Fer visibles les fronteres d’arquitectura

Abans de reestructurar, cal saber on es genera el coupling. Les violacions típiques de fronteres en clients Delphi són:

  • Els esdeveniments de UI (clic de botó) contenen SQL o accessos directes a taules.
  • Les regles de negoci estan distribuïdes: unes al client, altres en triggers, altres en informes o scripts d’importació.
  • Les connexions a la base de dades s’obren per tot arreu „de passada“, amb paràmetres diferents.

L’objectiu és un nucli manejable: pocs punts d’entrada a les funcions de negoci i un accés a dades central que gestioni connexions, transaccions i el tractament d’errors de manera consistent.

Pas 2: „Verträge“ definieren – auch ohne Services

Molts equips creuen que les interfícies només apareixen amb REST. En realitat, primer necessiteu contractes interns: quines funcions existeixen, quins paràmetres es passen, quins codis d’error són admissibles, quines transaccions pertanyen juntes? Aquests contractes poden existir inicialment com a mòduls/elementes clarament definits dins del projecte Delphi. Més endavant es poden traspassar relativament netament a un REST-Server o a un Windows- i Windows- und Linux-Services.

Estabilitzar l’accés a dades: FireDAC, transaccions i una estratègia de connexió clara

L’accés a dades és sovint la palanca més gran per a l’estabilitat en configuracions client‑servidor. Dues qüestions dominen: connexions consistents i límits de transacció nets. En entorns Delphi la BDE-reemplaçament amb connexió nativa (biblioteca d’accés a dades amb controladors i pool de connexions) sovint és l’eix de la modernització, especialment si encara s’utilitza BDE (Borland Database Engine, una capa d’accés a dades més antiga).

BDE-reemplaçament: Més que un canvi de controlador

Un BDE-Ablösung s’estima per defecte si es concep només com a „canviar components“. En la pràctica afecta:

  • Dialecte SQL i parametrització: Diferents bases de dades i controladors reaccionen de manera diferent a formats de data, tractament de NULL, ordenació i jocs de caràcters.
  • Comportament de transaccions: Autocommit, nivells d’aïllament (regles sobre com estrictament es gestionen bloquejos/lectures) i recuperació d’errors.
  • Rendiment i bloquejos: Algunes lògiques antigues confien involuntàriament en mecanismes de bloqueig implícits.

A nivell operatiu és important un concepte de proves que no es limiti a les màscares „fer clic“, sinó que simuli sota càrrega els processos típics de comptabilització i d’importació.

Transaccions: menys màgia, més regles

En molts clients Delphi desenvolupats al llarg del temps, les transaccions s’originen de manera accidental: un formulari grava diverses taules, però els casos d’error no es retrocedeixen netament. Això condueix a estats parcials que més endavant cal „netejar manualment“. És millor un patró consistent:

  • Transacció per operació funcional (p. ex. „crear comanda“, „registrar entrada de mercaderies“), no per instrucció SQL.
  • Rutes d’error clares: en cas d’errors de validació no deixar un estat de dades a mig fer, sinó una cancel·lació controlada.
  • Idempotència en imports: reingestió repetible sense registres duplicats.

Per a l’operació i el suport IT, el més important és: quan una operació falla, ha de fallar de manera traçable — amb entrades de registre, IDs correlacionables i una classe d’error clara (p. ex. autorització, conflicte de dades, error tècnic).

Extreure la lògica de negoci del client — sense degradar la usabilitat

Molts clients Delphi han crescut històricament centrats en la interfície d’usuari: el flux està en formularis, les validacions en esdeveniments OnChange, els efectes secundaris en OnExit. Des del punt de vista de l’usuari sovint és ràpid i directe — però des de la perspectiva arquitectònica és difícil de provar i d’extendre.

Use-Cases en lloc de la lògica del formulari

Un pas intermedi pràctic és agrupar-ho en Use-Cases funcionals: un Use-Case encapsula una operació (p. ex. „autoritzar factura“) incloent validacions, càlculs, accés a dades i registre. La UI el crida i mostra els resultats, en lloc d’implementar les regles ella mateixa. Avantatge: més endavant el mateix Use-Case es pot exposar mitjançant una REST-API, per exemple per a un portal o un servei d’importació.

Centralitzar regles: validació, sèries numèriques, models d’estat

Candidats típics per a la centralització són:

  • Regles de validació (camps obligatoris, intervals de valors, plausibilitats)
  • Sèries numèriques (documents, lots, operacions) amb evitació de conflictes
  • Models d’estat (esborrany → verificat → autoritzat → registrat) amb transicions permeses
  • Comprovacions d’autorització a prop de l’operació de negoci, no només a la UI

Especialment amb les autoritzacions això és determinant: si les regles només existeixen al client, costa mantenir-les consistents per a interfícies, automatitzacions o portals posteriors.

Fer-se interoperable: REST-API com a accés controlat, no com a „segon camí“

Moltes empreses necessiten integració: dades per a BI, connexió amb ERP/DMS/CRM, automatització d’importació/exportació o un portal de clients. L’error típic és construir una REST-API ‚paralela‘ que accedeix directament a taules perquè és ràpid. Això genera dues veritats: la lògica del client i la de l’API divergeixen, i la consistència de dades passa a ser qüestió de sort.

REST com a façana davant Use-Cases estables

Una REST-API (interfície basada en HTTP, normalment JSON) hauria d’oferir operacions funcionals, no reflectir taules. Exemples: „crear comanda“, „consultar estat“, „pujar document a una operació“. L’API invoca els mateixos Use-Cases que utilitza el client. Això redueix regles duplicades i estableix una governança clara: els sistemes externs obtenen un accés controlat, versionable i assegurable.

Seguretat i operació d’una API

Des del punt de vista B2B, el més rellevant no són tant els endpoints sinó l’operació i la protecció:

  • Autenticació: p. ex. procediments basats en tokens; en entorns empresarials sovint connexió a identitats centrals (SAML 2.0 és un estàndard estès per a l’inici de sessió únic (Single Sign-on)).
  • Autorizació: drets per operació, no només «pot utilitzar l’API».
  • Limitacions de ràtio i protecció contra l’abús: important en accessos de socis.
  • Versionament: canvis planificables sense trencaments silenciosos.

Si ja planifiqueu una modernització d’interfícies, val la pena considerar un enfocament estructurat per afegir una REST-API al programari existent: això facilita la priorització i redueix els riscos operacionals.

Desplegament i capacitat d’actualització: el factor de costos silenciós

Molts Delphi-sistemes no fallen per funcionalitat, sinó pels processos de desplegament. «Client-Server» vol dir en la pràctica: molts llocs de treball, permisos diferents, ocasionalment servidors de terminal o Citrix, a més ubicacions remotes amb VPN. Un sistema ordenat té una història d’actualització definida.

Estandarditzar: configuració, versions, entorns

Mesures típiques que tenen efecte immediat en explotació:

  • Extreure la configuració del paquet binari: fitxers de configuració separats o fonts de configuració centrals, perquè les actualitzacions no sobreescriguin les configuracions.
  • Perfils d’entorn: Test, Staging, Producció amb punts finals de base de dades i de serveis clarament separats.
  • Instal·lació automatitzada: reproducible, també per a imatges de servidor de terminal.

Important: Fins i tot si el client és «només» un programa d’escriptori, es beneficia de la disciplina de llançaments com en serveis de servidor: versionament amb changelog, opcions de rollback i passos de migració definits.

Migracions de bases de dades: planificables en lloc d’arriscades

Amb cada canvi estructural a taules, índexs o vistes cal que estigui clar: quina versió de l’aplicació espera quin esquema? Un enfocament ordenat utilitza:

  • Scripts de migració versionats per versió
  • Fases de transició compatibles amb versions anteriors, quan el desplegament del client no pot fer-se simultàniament
  • Estrategies clares de backout (còpia de seguretat, recuperació, finestres de temps d’inactivitat definides)

Això no és un fi en si mateix: sense aquesta disciplina, les millores d’arquitectura en l’operativa diària es consideren «massa arriscades» i es queden aturades.

Logging, monitoratge i depuració d’errors: sense telemetria no hi ha estabilitat

«No passa sovint, però si passa, tot s’atura» és un senyal d’advertència. Els sistemes client‑server existents sovint disposen de logging insuficient, sobretot a través de límits de sistema. Per als equips d’explotació és crucial que un cas d’error es pugui reconstruir en el temps i amb el context tècnic.

Què s’hauria de registrar en la pràctica

  • Correlació: un ID d’operació que connecta client, servei i operacions de base de dades
  • Context: usuari, mandant, màquina/ubicació, versió, operació afectada
  • Detalls tècnics: codis d’error de la base de dades, informació de temps d’espera, reintents
  • Aspectes rellevants per a la seguretat: intents d’inici de sessió fallits, violacions de permisos, patrons d’accés anòmals

És important separar els logs tècnics dels registres funcionals. Un registre funcional (p. ex. «Document autoritzat per l’usuari X») sovint és rellevant per a l’auditoria; els logs tècnics serveixen per a l’anàlisi d’errors i s’han de protegir i rotar en conseqüència.

Xarxa, seguretat i permisos: De „funciona a la LAN“ a „funciona a l’empresa“

Molts Delphi-sistemes client-servidor es van dissenyar en èpoques en què «a la LAN» era sinònim de «de confiança». Avui dia: segmentació, enfocaments Zero-Trust, VPN, MFA i regles de tallafocs restrictives són l’estàndard. Per tant, ordenar l’arquitectura també és treball de seguretat.

Permisos de la base de dades: Principi dels mínims privilegis

Una situació de llegat habitual és un usuari de base de dades amb permisos extensos que utilitzen tots els clients. Millor és:

  • Drets basats en rols per àrea funcional
  • Accessos separats per al client, serveis, treballs per lots
  • Sense privilegis d’administrador en els accessos de producció per a operacions quotidianes

Això limita les conseqüències dels errors i facilita notablement els audits. Al mateix temps augmenten la transparència i la capacitat de diagnosi, perquè els errors de permisos ja no apareixen de manera aleatòria.

Secrets i configuració: fora de les contrasenyes en text pla

Les credencials a fitxers INI o al Registre són un clàssic. Segons l’entorn entren en consideració magatzems de secrets centrats, configuració xifrada o, com a mínim, conceptes operatius amb permisos de fitxer restrictius. Decisiu és: la solució ha de romandre administrable. La seguretat que s’eluda en l’ús diari no és seguretat.

Modernització pas a pas: Per on començar quan tot sembla important?

La priorització determina si l’ordenació s’estanca després de dos mesos o aporta un alleujament mesurable. Ha demostrat ser eficaç un ordre que aborda primer la seguretat operativa i després implementa millores d’estructura.

Un full de ruta pragmàtic per a la modernització

  1. Estabilitzar el comportament de transaccions i errors: menys corrupció de dades, menys «reparacions manuals».
  2. Accés centralitzat a les dades: configuració de connexió unificada, timeouts, reintents, registre.
  3. Agrupar els casos d’ús: extreure les operacions nuclears crítiques de la interfície d’usuari.
  4. Definir una interfície cap a l’exterior: REST-API o façana de servei per a la integració, sense donar accés a taules.
  5. Professionalitzar el desplegament: actualitzacions reproducibles, migracions de base de dades versionades.
  6. Enduriment de la seguretat: permisos, secrets, límits de xarxa, capacitat d’auditoria.

Aquest ordre no és dogmàtic, però fa que els passos inicials tinguin un impacte immediat en l’operativa i que els passos posteriors siguin més fàcils.

Esculls típics des de la perspectiva del projecte – i com evitar-los

En les tasques d’ordenació, els projectes rarament fallen per la tecnologia; el problema són les condicions circumstancials. Alguns esculls es presenten amb especial freqüència:

Reforma «paral·lela» sense xarxa de qualitat

Si les mesures d’arquitectura s’executen paral·lelament als canvis funcionals, sovint manca una xarxa de seguretat. Com a mínim calen: dades de prova reproducibles, proves de fum definides per als processos clau, i un procés de desplegament que consideri el rollback no com una derrota, sinó com una eina d’operativa.

Dos models de dades simultanis

Aquells que construeixen nous mòduls però mantenen els formularis antics accedint directament a les taules, ràpidament es troben amb regles inconsistents. Millor: definir regles de transició clares. O bé una àrea es manté temporalment «vella» i no se la modernitza en paral·lel, o bé es canalitza de manera consistent a través de la nova capa.

Integració sense governança

En el moment que s’integren socis o sistemes interns, es generen dependències. Sense versionat, proves de contracte i una estratègia de deprecació definida, cada canvi es converteix en un bucle de coordinació. Això és menys un problema de desenvolupadors que un problema d’arquitectura i d’operacions.

Conclusió: Ordenar vol dir tornar a fer manejables l’operació i el canvi

Si ordeneu les arquitectures client-servidor a Delphi, no es tracta de «modernitzar per la modernitat». Es tracta d’estructurar una solució digital empresarial crítica perquè l’operació, la seguretat i l’evolució continuïn essent planificables. Les palanques més eficaces solen ser poc espectaculars: capes clares, accés a dades coherent, límits de transacció nets, registre robust i una estratègia d’interfícies que no dupliqui les regles.

El punt decisiu és l’enfocament: incremental, amb una visió objectiu i una priorització que generi estabilitat en primer lloc. D’aquesta manera podeu modernitzar una Delphi-paisatge desenvolupada amb el temps sense posar en perill l’operativa diària — i sense veure’s forçats a un arrencada total arriscada.

Si voleu avaluar pragmàticament els següents passos per a la vostra arquitectura, els accessos a la base de dades i les interfícies, parleu amb nosaltres:

En l’àmbit tècnic també tenen un paper important les Delphi Modernització quan integracions, fluxos de dades i evolució han de funcionar conjuntament de manera neta.

Parli del projecte o del projecte de modernització amb Net-Base.

Pas següent

Quan d'un tema se'ndevé un projecte real, s'han de considerar aviat i de manera conjunta l'arquitectura, els actius existents i l'operació.

No només donem suport en qüestions puntuals, sinó també quan, a partir de fragments de codi font, temes de sistemes heredats o idees de portal, ha de sorgir un projecte empresarial sòlid.

  • L'estat actual, la visió objectiu i els riscos tècnics s'avaluen conjuntament.
  • REST, accés a dades, portals i desplegament no es posposaran com a efectes retardats.
  • Veu aviat quin camí és viable des del punt de vista econòmic i operatiu.

Comparteix la publicació

Comparteix aquesta publicació directament

LinkedIn, X, XING, Facebook, WhatsApp i correu electrònic estan disponibles immediatament. Per Instagram preparem l'enllaç i un text curt immediatament.

Correu electrònic

Instagram s'obre en una pestanya nova. L'enllaç i el text curt es copien prèviament al porta-retalls.