Nga tema e revistës në praktikën e projektit
Faqe shërbimi dhe teknike të përshtatshme për artikullin
Kushdo që dëshiron të modernizojë lidhjen me SQL Server në Delphi rrallë ka një problem “funksionon ose nuk funksionon”. Në shumë kompani, aplikacionet desktop të zhvilluara me kohë Delphi ose shërbimet Windows funksionojnë për vite me radhë në mënyrë të besueshme – deri sa shfaqen kërkesa të reja: përditësime Windows, versione të reja të SQL Server, kërkesa më të rrepta për siguri, volum më i madh të të dhënave, më shumë lokacione ose nevoja për të kapsuluar ndërfaqet në mënyrë të pastër. Atëherë bëhet i dukshëm ndikimi që ka aksesimi i të dhënave, trajtimi i gabimeve dhe logjika e transaksioneve në përditshmërinë e administrimit dhe operimit.
Kjo shkrim përshkruan hapa konkretë modernizimi që mund të zbatohen në sisteme ekzistuese, pa rindërtuar gjithçka nga e para. Fokusin e ka te vendimet që janë relevante për drejtuesit e IT, administratorët dhe përgjegjësit teknikë të projektit: zgjedhja e driver-it, niveli i sigurisë, qëndrueshmëria në operim, mirëmbajtja, performanca dhe një rrugë migrimi me rrezik të ulët.
Pse lidhja me SQL Server në Delphi bëhet çështje modernizimi
Në praktikë, presioni për modernizim rrallë lind për shkak të gjuhës Delphi për vete, por për shkak të ndërveprimit midis bazës së të dhënave, peizazhit të driver-ave, fortifikimit të sistemit operativ dhe kompleksitetit në rritje të softuerit biznesor. Shkaktarë tipikë janë:
- Barrë teknike e vjetër në aksesin e të dhënave: rrugë të vjetra ADO-/OLE-DB, konfigurime ODBC “me dorë”, parametrime lidhjesh të pashkruara ose komponentë të përzier në projekt.
- Parazgjedhjet e sigurisë nuk përputhen më: kërkesat për TLS-Verschlüsselung (Transportverschlüsselung), kontrollin e certifikatave, rotacionin e fjalëkalimeve ose Windows-Authentifizierung.
- Dhimbje performancash: rritje e numrit të përdoruesve, më shumë paralelizëm, raporte të reja, integrime shtesë – dhe papritmas shfaqen timeout-e, deadlock-e ose bllokime të gjata.
- Mirëmbajtja vuan: SQL-string-e në formularë, mungesë parametrizimi, „try/except“ pa kontekst diagnostikues, kufij të paqarta të transaksioneve.
- Hopa platformash dhe versionesh: përditësim në versione të reja të SQL Server ose Windows, kalim në 64-bit, Terminalserver/RemoteApp ose virtualizim.
Pika kryesore: Një lidhje e modernizuar nuk është vetëm “më e shpejtë”. Ajo është më e kontrollueshme: operim më i qartë, konfigurim i riprodhueshëm, log-e me kuptim dhe një akses i të dhënave që mund të testohet dhe të rinovohet hap pas hapi.
Kapni gjendjen aktuale me kujdes: para se të “thjesht të instaloni FireDAC”
Para se të zëvendësohen komponentët, ia vlen një inventar i shkurtër dhe i strukturuar. Ai kursen ditë të mëvonshme në kërkimin e gabimeve, sepse bën të dukshme varësitë që në projekte të vjetra shpesh janë të implikuara vetëm në mënyrë të pashkruar.
Lista e kontrollit: Çfarë duhet të përgjigjet analiza?
- Cila teknologji aksesimi? ADO (përmes OLE DB), ODBC, dbExpress, BDE-mbetjet, biblioteka pronësore – dhe ku janë të shpërndara në kod?
- Si ndërtohen lidhjet? Connection-String qendror apo për modul? A ekzistojnë skedare konfigurimi, entitete të Registry, variabla mjedisi?
- Si autenticohen? SQL-Login, Windows Authentication (hyrje e integruar), llogari shërbimi, Kerberos/NTLM, ndoshta modulet e përziera.
- Si përdoren transaksionet? Për çdo operacion ruajtjeje, për çdo use-case, apo madje “autocommit” pa kufij të qartë?
- Cilat veçori të SQL Server përdoren? Stored Procedures, Views, Trigger, CLR, Always On, Verschlüsselung, Columnstore, Temporal Tables.
Një rezultat i kësaj faze duhet të jetë një pamje e vogël e synimit: cilat module do të modernizohen së pari, cilat konfigurime do të standardizohen, dhe cilat rreziqe (p.sh. ndryshimi i autentikimit) do të trajtohen të ndara në mënyrë të qëllimshme.
Modernizimi i lidhjes me SQL Server në Delphi: strategjia për drejtues dhe komponentë
Për shumë sisteme Delphi vendimi kyç është: si komunikojmë teknikisht me SQL Server — dhe si e standardizojmë këtë nëpër të gjitha modulet? Në stack-et moderne Delphi zëvendësimi i BDE-Ablosung me lidhje native shpesh është standardi më praktik. BDE-Ablosung mit nativer Anbindung është një shtresë qasjeje në të dhëna (Data Access Layer) në Delphi që kapsullon drejtuesit, mbështet parametrizimin dhe mund të pasqyrojë në mënyrë të qartë kërkesat tipike të operimit si pooling dhe logging.
Pse standardizimi është më i rëndësishëm se „drejtuesi i përsosur”
Në aplikacionet ekzistuese nuk është e pazakontë të hasësh operim të përzier: një pjesë përdor ADO, një tjetër ODBC, një e treta dbExpress. Kjo çon në konfigurim të dyfishtë, semantika të ndryshme për timeout dhe transaksione dhe modele gabimesh që janë të vështira për t’u krahasuar. Qëllimi i modernizimit duhet të jetë:
- një standard i unifikuar i lidhjes (inkl. Timeouts, kriptim, Application Name),
- një koncept i përbashkët për gabimet dhe regjistrimin,
- një shtresë abstraksioni të përcaktuar qartë midis logjikës së UI/servisit dhe SQL.
A duhet ADO të zëvendësohet apo të kapsulohet?
Shumë sisteme përdorin ADO sepse atëherë ishte „më e thjeshtë”. Sot ADO nuk është automatikisht i gabuar, por shpesh përbën një pengesë për konfigurimet parazgjedhëse të sigurisë, strategjitë e pooling dhe diagnostikën. Në praktikë ka dy rrugë të zbatueshme:
- Kapsulim: ADO mbetet për fillim, por futet një fasadë qasjeje në të dhëna, në mënyrë që modulet e reja të lidhen që nga fillimi në mënyrë të pastër.
- Zëvendësim gradual: Modulet ose rastet e përdorimit ndryshohen një nga një në FireDAC, të shoqëruara me teste regresioni dhe operim paralel.
Cila variantë përshtatet varet nga presioni i lëshimit, mbulimi i testimit dhe kompleksiteti i logjikës SQL — më pak nga numri i thjeshtë i formularëve.
Siguria në lidhjen me bazën e të dhënave: TLS, identitetet dhe të drejtat — trajtim i qartë
Nga perspektiva e operimit, lidhja me bazën e të dhënave është një çështje kryesore e sigurisë. Bëhet fjalë për enkriptimin e transportit, identitetet, të drejtat minimale dhe konfigurim të gjurmueshëm. Sidomos në aplikacionet e zhvilluara historikisht, vlerat parazgjedhëse shpesh janë historike, jo të zgjedhura me qëllim.
Enkriptimi i transportit (TLS) dhe verifikimi i certifikatës
SQL Server mund të enkriptojë lidhjet përmes TLS. E rëndësishme nuk është vetëm „Encrypt an”, por edhe verifikimi i certifikatës dhe një menaxhim i konsistent i certifikatave (p.sh. Subject Alternative Names të sakta). Përndryshe bie në kurth: enkriptimi aktiv, por përmes „Trust Server Certificate” praktikisht pa verifikim real.
Për administratorët vlerësohet: konfigurimi duhet të jetë i riprodhueshëm (GPO/Deployment), dhe gabimet duhet të jenë të qarta (p.sh. certifikata e skaduar vs. emri DNS i gabuar).
SQL-Login vs. Windows autentifikimi
Hyrjet SQL janë të lehta për t’u shpërndarë, por më të vështira për t’u operuar në mënyrë të sigurt: rotacioni i fjalëkalimeve, menaxhimi i sekretit dhe rreziku i keqpërdorimit. Windows Authentication (autentikim i integruar) mund të sjellë përfitime në kontekstin e ndërmarrjes, por kërkon rregulla të qarta: llogaritë e shërbimit, SPNs (Service Principal Names) dhe rrugët Kerberos duhet të jenë të sakta, veçanërisht kur qasja kalon përmes disa hops (p.sh. nga serveri i terminalit në bazën e të dhënave).
Një modernizim praktik shpesh është: Windows Authentication për komponentët server (Windows- und Linux-Services, REST-Server) dhe logime të rregulluara qartësisht për raste të veçanta – secili me të drejta minimale.
Koncepti i të drejtave: Më pak është më i qëndrueshëm
Besueshmëria operative varet edhe nga të drejtat. Të drejtat tepër të gjera çojnë në “efekte anësore”: ndryshime të papritura të skemës, fshirje të të dhënave ose anashkalim i rregullave funksionale. Praktika e rekomanduar është:
- Rollet DB për çdo aplikacion (lexim, shkrim, administrative të ndara),
- Të drejta të shprehura në vend të anëtarësisë në role standarde tepër të fuqishme,
- Ndërprerje e qartë midis DDL (ndryshime skeme) dhe DML (ndryshime të dhënash) përmes deployment-eve.
Performanca dhe qëndrueshmëria: Verbindungspooling, Timeouts, Sperren
Shumë probleme performancë nuk janë „SQL Server është i ngadaltë“, por pasojë e strategjive të klientit të inkonsistente: lidhje tepër të shumta, Timeouts të gabuara, veprime UI që kapërcejnë transaksionet ose queries të paparametrizuara. Modernizimi këtu do të thotë: ta bësh aksesin në të dhëna të planifikueshëm.
Lidhjet: Hapje/Mbyllje vs. Pooling
Në aplikacionet desktop është e zakonshme të hapen lidhjet sipas nevojës. Në proceset server (Windows-Service, REST-Server) pooling-u i lidhjeve është vendimtar për të përballuar kulmet e ngarkesës. Pooling do të thotë: lidhjet ripërdoren në vend që të ndahen rishtas për çdo kërkesë. Kjo redukton overhead-in e hyrjes dhe stabilizon kohët e përgjigjes.
E rëndësishme është pala operative: Pooling kërkon limite të qarta, idle-timeout-e të përshtatshme dhe monitoring, që lidhjet „e ngecura“ të bëhen të dukshme. Përndryshe problemet vetëm shtyhen.
Timeouts: üç nivele, një qëllim
Në skenarët me SQL Server, Timeouts veprojnë në disa nivele: rrjeti/socket, login/handshake dhe Command-Timeout (koha e ekzekutimit). Një lidhje moderne do të thotë: vendosni këto vlera me vetëdije dhe justifikoni ato për çdo rast përdorimi (p.sh. kërkim interaktiv kundrejt një procesi batch natën).
Në operim duhet të jetë e mundur të përcaktohet nëse një Timeout shkaktohet nga mungesa e indekseve, bllokime ose probleme rrjeti. Kjo funksionon vetëm nëse aplikacioni regjistron kontekstin (lloji i query-t, parametrat, koha, emri i serverit).
Transaksionet dhe bllokimet (Locking) i bëjmë të menaxhueshme
Transaksionet janë një temë kyçe për qëndrueshmërinë. Një transaksion është një rrjedhë e lidhur e ndryshimeve të të dhënave që zbatohen tërësisht ose aspak. Në praktikë problemet lindin kur transaksionet qëndrojnë të hapura për shumë kohë – shembull për shkak të veprimeve UI, konfirmimeve nga përdoruesi ose qasjes në skedar brenda transaksionit.
Hapat e modernizimit që ndikojnë menjëherë:
- Përcaktoni kufijtë e transaksioneve për çdo operacion funksional (p.sh. „regjistrimi i një porosie“), jo për çdo formular.
- Asnjë pritje interaktive brenda një transaksioni (dialogë, llogaritje të gjata, printim/PDF).
- Bëni Deadlocks të analizueshëm: Zgjeroni trajtimin e gabimeve në mënyrë që viktimat e Deadlock të jenë të zbulueshme dhe strategjitë e riprovimit të mund të aplikohen në mënyrë të synuar.
Rritja e mirëmbajtjes: kapsulimi i SQL, detyrimi i parametrizimit, përmirësimi i diagnostikimit të gabimeve
Shumë projekte të arkivit Delphi vuajnë më pak nga „mungesa e funksionaliteteve“ dhe më shumë nga qasja e paqartë në të dhëna. Mirëmbajtja krijohet kur SQL dhe logjika e të dhënave nuk janë të shpërndara kudo, por të vendosura të kuptueshme në disa pika të pakta.
String-et SQL në UI janë një rrezik për mirëmbajtje
Nëse çdo formular ndërton vetë string-et SQL, çdo ndryshim në skemë bëhet i kushtueshëm. Për më tepër rriten rreziqet e sigurisë (p.sh. SQL Injection) dhe diagnostikimi bëhet i vështirë. Një qasje moderne është një shtresë e aksesit të të dhënave, e cila:
- menaxhon qendrorisht deklaratat SQL (për modul / rast përdorimi),
- përdor parametrizimin në mënyrë konsekuente (në vend të konkatenimit të vargjeve),
- kthen të dhëna në struktura të qarta (në vend të „Dataset kudo“).
Për ekipe pa kapacitet të madh zhvillimi, një hap ndërmjetës është tashmë i vlefshëm: një fabrikë pyetjesh e unifikuar dhe rregulla të qarta se ku lejohet të vendoset SQL.
Stored Procedures vs. Inline SQL: realiteti operativ, jo çështje bindjeje
Stored Procedures (procedurat e ruajtura në SQL Server) mund të sjellin përfitime: logjikë qendrore, koncepte të të drejtave dhe shpesh plane ekzekutimi më të qëndrueshme. Inline SQL është më i shpejtë për t’u ndryshuar dhe për shumë ekipe më i përshtatshëm për versionim në të njëjtin proces release si aplikacioni.
Në praktikë është e zakonshme një strategji e përzier:
- Veprimet kritike të shkrimit (regjistrime, lëvizjet e stokut) më së shumti procedurale, kur të drejtat dhe konsistenca janë në plan të parë.
- Pyetjet me ngarkesë leximi (kërkime, lista, raporte) më së miri si SQL i versionuar në aplikacion – por i parametrizuar qartë dhe i testuar.
Vendimtare është më pak „ku“, dhe më shumë që distribuimet (Deployments), rikthimet (Rollbacks) dhe varësitë të jenë të qarta.
Diagnostikimi i gabimeve: nga teksti i Exception drejt një sinjali të menaxhueshëm për operacion
Shumë aplikacione regjistrojnë vetëm „Gabim gjatë ruajtjes“. Për operimin dhe supportin e nivelit të dytë kjo është e pavlerë. Modernizimi do të thotë: informacione të strukturuara për gabimet, pa rrjedhje të të dhënave sensitive. Elemente logu të dobishme janë:
- Korelacion: Request-ID ose ID e procesit, për të bashkuar linjat e log-ut.
- Konteksti teknik: server/instancë, baza e të dhënave, tipi i login-it, driveri, kohëzgjatja.
- Kategoria SQL: emri i pyetjes / rasti i përdorimit, jo domosdoshmërisht teksti i plotë SQL.
- Kategoria e gabimit: Timeout, Deadlock, shkelje e constraint-it, rrjet, login.
Kështu ndryshimi midis „ne shohim vetëm simptomat“ dhe „mund të kufizojmë qartë shkaqet“ bëhet në praktikë shumë i konsiderueshëm.
Ndryshimet e skemës dhe të të dhënave: bëni migrimin të planifikueshëm
Kush modernizon lidhjen me SQL Server-in, pothuajse gjithmonë prek edhe skemën: tipet e të dhënave, indeksat, constraints, collation, ose futja e tabelave të reja për integrime. Pa disiplinë migrimi lind një sistem i brishtë, i cili funksionon në një sistem testimi, por dështom në Staging/Produktion.
Migrime të versionuara të bazës së të dhënave në vend të ndërhyrjeve manuale
Një qasje e besueshme është të trajtosh ndryshimet në bazën e të dhënave si release-et e aplikacionit: të versionuara, të përsëritshme, me parakushtet e qarta. Kjo mund të bëhet përmes skripteve të migrimit, një pakete deployment ose një pune release. E rëndësishme nuk është mjeti, por rregulla:
- Asnjë „ndryshim manual“ në Produktion pa gjurmueshmëri.
- Strategjia e rikthimit të paktën për ndryshimet kritike (ose një plan më i qartë „vetëm përpara“).
- Mjedis staging, që reflekton realisht të dhënat e prodhimit (maskim nëse nevojitet).
Llojet e të dhënave dhe Unicode: shmangni gabimet e heshtura
Veçanërisht tek aplikacionet më të vjetra Delphi supozimet historike (ANSI-Strings, Collations të vjetra) përplasen me kërkesat moderne (Unicode, mbarëgjuhësia, klientë të rinj). Nga ana e SQL Server, tipet NVARCHAR/Unicode janë standard. Modernizimi këtu do të thotë: përcaktim i qëllimshëm i mënyrës se si funksionon kodimi i karaktereve, radhitja dhe krahasimi. Përndryshe lindin gabime të vështira për t’u riprodhuar në kërkim, verifikimin e dyfishimeve ose në eksportet e ndërfaqeve.
Arkitektura: shkëputja e aksesit të të dhënave dhe hapja për ndërfaqe
Në shumë kompani aplikacioni Delphi nuk është më i vetmi: portalet, ofruesit e shërbimeve të jashtme, BI, DMS apo integrimet ERP hyjnë te të njëjtat të dhëna. Kur lidhja me bazën e të dhënave modernizohet, është një moment i mirë për të orientuar arkitekturën në mënyrë që të lejojë rritje.
Layering: kufij të qartë midis UI, logjikës së biznesit dhe aksesit në të dhëna
Një model i provuar është një arkitekturë e shtresave (p.sh. prezantimi, logjika e biznesit, akses në të dhëna). Kjo tingëllon abstrakte, por ka efekte shumë konkrete në operim:
- Ndryshimet janë më lokale: një fushë e re nuk kërkon 20 përshtatje formularësh me string-e SQL.
- Bëhen të mundshme testet: logjika e biznesit mund të ekzekutohet mbi të dhëna testimi, pa lidhje reale me bazën e të dhënave.
- Siguria mund të zbatohen qendrorisht: logging, verifikime të të drejtave, parametrizim.
Për hapa të mëvonshëm si Delphi REST-API ose një Delphi REST-API und REST-Server kjo shkëputje është baza: atëherë nuk do të „hapet baza e të dhënave në Internet“, por rastet e përdorimit të përcaktuara do të ekspozohen si ndërfaqe.
Operacion paralel: përzierje e kontrolluar e aksesimeve të vjetra dhe të reja të të dhënave
Në praktikë nuk është gjithmonë e mundur të bëhet një „Big Bang“. Një qasje pragmatiske është që aksesimet e reja të dhënash të kalojnë përmes standardit të ri, ndërsa modulet e vjetra vazhdojnë të funksionojnë. E rëndësishme këtu:
- Rregulla të unifikuara të transaksioneve, në mënyrë që të mos veprojnë dy teknologji kundër njëra-tjetrës.
- Konfigurim i përbashkët (Server, DB, Encryption, Timeouts) nga një burim.
- Kufij të qartë migrimi: për çdo Use-Case ose modul, jo „pak kudo“.
Operimi dhe administrimi: konfigurimi, monitoring, procesi i lëshimit
Një lidhje e modernizuar me SQL Server konsiderohet „e përfunduar“ vetëm kur funksionon mirë në operim: parametrat e gjurmueshëm, loget e qarta, lëshimet e planifikueshme, dhe monitoring që nuk tregon vetëm ngarkesën e CPU-së, por edhe problemet e aplikacionit.
Konfigurimi: i riprodhueshëm dhe specifik për mjedis
Midis zhvillimit, testimit, staging dhe prodhimit emrat e serverëve, certifikatat, autentifikimi dhe ndonjëherë edhe emrat e bazave të të dhënave ndryshojnë. Kjo nuk duhet të zgjidhet me ndryshime në kod, por përmes një strategie të qartë konfigurimi (skedar, Secret-Store, parametrat e Deployment-it). Është vendimtare: i njëjti Build, konfigurim i ndryshëm – dhe një mekanizëm që detekton gabimet e konfigurimit herët.
Monitoring: metrikat e aplikacionit plotësojnë metrikat e SQL-Server
SQL Server ofron shumë mundësi diagnostikimi (Wait Stats, Query Store, analiza të bllokimeve). Për një pamje të plotë nevojiten edhe metrika të aplikacionit: kohët e përgjigjes për çdo rast përdorimi, shkalla e gabimeve, numri i operacioneve paralelë në DB, përsëritjet pas deadlock-eve. Kjo u mundëson përgjegjësve IT të vendosin nëse një problem buron nga baza e të dhënave, rrjeti ose aplikacioni.
Procesi i release-it: Mendoni së bashku bazën e të dhënave dhe aplikacionin
Nëse Delphi-aplikacioni dhe baza e të dhënave deployohen të ndara, lindin gabime tipike: aplikacioni i ri pret një kolonë të re, migrimi i bazës së të dhënave ende nuk është shpërndarë (ose anasjelltas). Prandaj një proces modern i release-it përcakton:
- Renditja (p.sh. migrimi së pari, aplikacioni më pas),
- Dritare e kompatibilitetit (versionet e aplikacionit mund të funksionojnë për një kohë me skemën e vjetër),
- Smoke Tests pas deployimit (hyrje, rastet kryesore të përdorimit, operacioni i shkruajtjes).
Reduktimi i rrezikut në projekte: Si të modernizoni pa ndërprerje
Teknikisht shumë gjëra janë të mundshme, por realiteti i projektit do të thotë: dritare të kufizuara mirëmbajtjeje, mbulim i kufizuar i testeve, operacioni duhet të vazhdojë. Provuar ka qenë një qasje me etapa të qarta.
Plani i etapave që funksionon në mjedise ekzistuese
- Krijimi i një baseline: dokumentoni modelet e aktuale të gabimeve, timeout-et, Top-Queries, konfigurimin e serverit.
- Përcaktimi i një standardi konfigurimi: Connection-String-Regeln, TLS/Trust-Policy, timeout-et, Application Name.
- Futja e një qasje të re për aksesin e të dhënave: FireDAC (ose standardi i zgjedhur) si një shtresë e përcaktuar, fillimisht për rastet e zgjedhura të përdorimit.
- Përmirësimi i diagnostikimit: Logging, korrelacion, kategori gabimesh, funksione opcionale të SQL-Trace në rast të mbështetjes.
- Zëvendësim i shkallëzuar: migroni modulët, plotësoni testet e regresionit, hiqni rrugët e vjetra.
- Ngurtësimi dhe operacioni: monitoring, procedurat e release-it, finalizimi i konceptit të të drejtave.
E vendimtare: Çdo etapë ofron një përfitim të pavarur. Kështu modernizimi justifikohet edhe kur nuk mund të prekësh menjëherë tërë sistemin.
Konkluzion: Një lidhje moderne me SQL Server është një projekt operativ, jo vetëm refaktorim
Modernizimi i lidhjes së SQL Server në Delphi është më shumë se një shkëmbim komponentësh. Ai prek nivelin e sigurisë, aftësinë diagnostikuese, stabilitetin e release-it dhe pyetjen se sa mirë softueri juaj i biznesit mund të përballojë kërkesa në rritje. Ai që standardizon me vetëdije strategjinë e driver-ëve, autentikimin, dizajnin e transaksioneve dhe logging, redukton rreziqet operative dhe krijon një bazë për hapa të mëvonshëm si ndërfaqet REST, lidhjet me portale ose një modernizim i shkallëzuar i Delphi.
Nëse dëshironi të zhvilloni më tej teknologjikisht të qëndrueshme mjedisin tuaj Delphi dhe të modernizoni në mënyrë të strukturuar lidhjen me SQL Server, flisni me ne:
Në fushën profesionale, Delphi FireDAC SQL Server dhe Delphi zëvendësimi i Ado luajnë një rol të rëndësishëm kur integrimet, rrjedhat e të dhënave dhe zhvillimi i mëtejshëm duhet të punojnë së bashku në mënyrë të pastër.
Diskutoni projektin ose iniciativën e modernizimit me Net-Base.
Hapi tjetër
Kur nga një temë bëhet një projekt real, arkitektura, sistemi ekzistues dhe operimi duhet të merren në konsideratë së bashku që në fazat e hershme.
Ne nuk mbështesim vetëm në çështje të veçanta, por edhe kur nga fragmente të kodit burimor, temat legacy ose idetë për portale duhet të zhvillohen në një projekt korporativ të qëndrueshëm.
- Gjendja ekzistuese, imazhi i synuar dhe rreziqet teknike vlerësohen së bashku.
- REST, akses në të dhëna, portalet dhe Rollout nuk shtyhen si pasoja të mëvonshme.
- Ju e shihni herët se cila rrugë është e qëndrueshme ekonomikisht dhe operativisht.