Net-Base Rivista

14.07.2026

Rifattorizzare il codice legacy in Delphi: ridurre i rischi, aumentare la manutenibilità, garantire l'operatività

Applicazioni Delphi consolidate nel tempo sono spesso critiche per l’operatività aziendale – ma ogni piccola modifica diventa più costosa. Questo articolo mostra come rifattorizzare codice legacy in Delphi senza mettere a rischio il funzionamento: con una chiara analisi dell’esistente, misure prioritarie, test, dati e...

14.07.2026

Dal tema della rivista alla pratica di progetto

Pagine di servizi e tecniche correlate all'articolo

Video-Botschaft

Rifattorizzare il codice legacy in Delphi: ridurre i rischi, aumentare la manutenibilità, garantire l'operatività

Kurze Einordnung, warum kontrolliertes Refactoring bei geschäftskritischen Delphi-Systemen Betriebssicherheit und Änderungsfähigkeit verbessert, ohne einen riskanten Rewrite zu starten.

Video mit KI erstellt

Transkript anzeigen

Hallo. Kurz ein Thema, das im Betrieb schnell teuer wird.

Der Beitrag heißt: „Legacy-Code in Delphi refactoren: Risiken senken, Wartbarkeit erhöhen, Betrieb sichern“. Wenn jede kleine Änderung ein potenzieller Ausfall ist, werden Releases langsam, und niemand fasst das System gern an.

Legacy heißt hier nicht nur „alt“. Es heißt: schwer erklärbar, stark verknüpft, und dadurch riskant.

Refactoren bedeutet: umbauen, ohne das Verhalten zu ändern. Also kein Rewrite, sondern ein kontrollierter Umbau am fahrenden System.

Wichtig für Admins und IT-Leitung ist die Reihenfolge: erst Bestandsaufnahme. Was ist geschäftskritisch?

Wo hängen Datenbank, Schnittstellen und Jobs dran? Dann kleine, priorisierte Schritte, abgesichert durch Tests und sauberes Logging, damit Fehler auffallen, bevor Nutzer sie melden.

Wenn Sie dazu Fragen haben, schauen wir es gern gemeinsam an.

Chi gestisce un’applicazione aziendale critica per l’operatività Delphi conosce la tensione: funziona in modo stabile, mappa i processi core ed è profondamente integrata con database, interfacce e flussi di lavoro. Allo stesso tempo lo sforzo di modifica e il rischio aumentano a ogni release, perché nel corso degli anni si sono accumulati compromessi, casi particolari e dipendenze. È proprio qui che interviene Legacy-Code in Delphi refactoren: non come progetto di „Rewrite“, ma come ristrutturazione controllata sul sistema in esercizio – con effetti misurabili su manutenibilità, sicurezza dei release e operatività.

In pratica il refactoring difficilmente fallisce a causa di Delphi in sé, ma per mancanza di trasparenza: cosa è critico dal punto di vista funzionale? Dove risiedono i debiti tecnici (ossia difetti strutturali che rendono più costose le modifiche future)? Quali parti possono essere toccate nelle finestre di manutenzione e quali no? E come si evita che il „riordino“ introduca nuovi errori o problemi di performance in produzione? Questo contributo descrive un approccio praticabile che coinvolge la direzione IT e l’amministrazione: dalla ricognizione iniziale ai temi di architettura e dati fino a test, processo di rilascio e questioni di sicurezza.

Cosa significa realmente „Legacy“ nei progetti Delphi?

„Legacy“ viene spesso confuso con „vecchio“. Nel contesto aziendale il codice legacy è però primariamente codice il cui rischio di modifica è elevato e il cui comportamento è spiegabile solo in parte. Può trattarsi di un’applicazione VCL (Visual Component Library, classica Windows-Desktop-UI), ma anche di un servizio, di uno scheduler o di un sistema client-server.

I tratti tipici del legacy negli ambienti Delphi sono:

  • Accoppiamento forte: UI, accesso ai dati e logica di business sono mescolati; le modifiche generano effetti collaterali.
  • Regole implicite: la logica di dominio è nascosta in eventi, variabili globali o trigger del database, non in moduli chiari.
  • Accessi ai dati obsoleti: ad es. BDE (Borland Database Engine) o componenti proprietarie; assenza di strategie di pooling/timeout.
  • Gestione degli errori incoerente: le eccezioni vengono assorbite, i messaggi non arrivano al logging centrale.
  • Fragilità di build e release: dipendenze, problemi di percorso, impostazioni del compilatore divergenti, interventi manuali post-build.
  • Assenza di test: la conoscenza risiede nelle teste o nella „sequenza di clic“ degli utenti esperti.

Importante: il codice legacy non è automaticamente „cattivo“. Spesso è il risultato di pressione sui tempi, cicli tecnologici e decisioni pragmatiche. Il refactoring è allora un investimento nella gestibilità – dal punto di vista dell’operatività, della sicurezza, della compliance e della velocità di cambiamento.

Refactoring vs. Rewrite: cosa cambia per operatività e rischio

Un Rewrite (ri-sviluppo) promette un avvio pulito, ma spesso comporta lunghe fasi parallele, nuove classi di errori e elevati rischi di migrazione. Il refactoring invece mira a un‘azione incrementale di miglioramento mantenendo la capacità di rilascio continua. Per l’operatività IT e le linee di business questa è spesso la differenza decisiva: il sistema resta produttivo e le migliorie vengono distribuite in pacchetti gestibili.

Distinzione pratica:

  • Refactoring: la struttura viene migliorata, il comportamento esterno dovrebbe rimanere invariato. Focus: manutenibilità, testabilità, stabilità, riserve di performance.
  • Ristrutturazione/Modernizzazione: modifiche comportamentali mirate aggiuntive, p.es. nuove interfacce, nuovo database, nuovi obiettivi di piattaforma.
  • Riscrittura: nuova codebase, solitamente nuova UI/architettura; richiede la migrazione di dati, processi, interfacce – spesso „Big Bang“ o una lunga fase di transizione.

Per i decisori il punto è centrale: il Refactoring non è un fine a sé, ma una leva per ridurre i rischi di cambiamento. Questo è immediatamente rilevante per l’esercizio quando l’applicazione influisce su processi 24/7, flussi prossimi alla produzione o portali orientati al cliente.

Rifattorizzare il codice legacy in Delphi: avvio con una valutazione dello stato affidabile

Il primo passo non è uno strumento, ma una visione condivisa sui rischi e sugli obiettivi. Senza questa visione il refactoring finisce rapidamente in „sistemiamo un po‘ qui“ – e proprio questo è difficile da giustificare in esercizio.

1) Rilevare la criticità e la realtà operativa

Raccogliete quali parti sono realmente critiche per il business: chiusura giornaliera, interfacce verso ERP/DMS/CRM, acquisizione dati di produzione, fatturazione, gestione dei permessi. Integrate i parametri operativi: finestre di manutenzione, possibilità di rollback, monitoring, volume dei dati, requisiti di latenza.

Domande guida utili:

  • Quali funzioni devono continuare a funzionare anche in caso di guasti parziali (capacità di degradazione)?
  • Dove si trovano i „Single Points of Failure“ (es. uno scheduler centrale)?
  • Quali dati sono sensibili per motivi regolamentari o di protezione dei dati?
  • Quali integrazioni sono le più soggette a malfunzionamenti (importazione file, TCP/IP, SOAP/REST, messaging)?

2) Rendere visibili i debiti tecnici – non solo lo stile del codice

Nei progetti Delphi i debiti tecnici sono spesso di natura architetturale: stati globali, dipendenze cicliche tra unità, accessi ai dati difficili da testare, o eventi UI usati come „orchestrazione“. Le metriche (p.es. complessità, dimensione delle unità, grafo delle dipendenze) sono d’aiuto, ma sono utili solo se tradotte in azioni.

Uno schema pratico è una valutazione 2×2:

  • Modificato frequentemente e rischioso: massima priorità per il refactoring.
  • Modificato frequentemente e poco rischioso: migliorare processi/test, interventi strutturali minori.
  • Modificato raramente e rischioso: stabilizzazione/assicurazione (test, logging), non necessariamente „rendere bello“.
  • Modificato raramente e poco rischioso: lasciare intenzionalmente com’è.

3) Inventariare le dipendenze: dati, interfacce, runtime

Per l’amministrazione e i responsabili di progetto è fondamentale capire cosa dipende dall’esterno del codice: backend dei database, ODBC/OLE DB, condivisioni di file, flussi di stampa e PDF, COM/ActiveX, automazione di Office, servizi Windows, task pianificati, certificati, configurazioni proxy.

Qui i costi di refactoring spesso emergono in modo indiretto: una modifica „piccola“ può costringere a nuova logica di installer, nuovi permessi o nuove regole firewall. Questi effetti collaterali dovrebbero essere documentati precocemente in una mappa tecnica.

Zone problematiche tipiche nel legacy Delphi e come affrontarle in modo mirato

Il refactoring diventa gestibile se mira a pattern ricorrenti. I seguenti ambiti sono nella pratica spesso i maggiori fattori di rischio e costo.

Forms monolitici: quando la UI tiene insieme il sistema

Molte applicazioni VCL sono cresciute storicamente in modo „form-driven“: la maschera carica i dati, verifica le regole, scrive indietro, avvia report e aggiorna altre maschere. Questo funziona – finché non entrano in gioco più team o anni di storia delle modifiche.

Un approccio operativo consolidato è alleggerire progressivamente la UI:

  • Introdurre servizi orientati ai casi d’uso: operazioni di dominio come metodi chiaramente nominati invece di catene di eventi.
  • Incapsulare l’accesso ai dati: query/transazioni non negli eventi UI, ma in layer di Data Access.
  • Usare DTO/Modelli (semplici oggetti dati) per separare lo stato della maschera dallo stato del database.

Lo scopo non è la „purezza dei pattern“, ma migliore testabilità e meno effetti collaterali: una modifica alla validazione o al calcolo non dovrebbe mettere a rischio l’intero flusso di click della UI.

Datenzugriff modernisieren: BDE ablösen, FireDAC konsistent einsetzen

Se sono ancora in uso BDE o componenti dati incoerenti, il refactoring è spesso anche una modernizzazione del rischio operativo. BDE non è solo datato, ma spesso difficile da gestire: driver, configurazione, dipendenze 32‑bit e assenza di meccanismi di sicurezza moderni.

Sostituzione di BDE con connessione nativa (la moderna libreria di accesso ai dati di Delphi) è in molti scenari uno standard sensato, se applicata con rigore: parametri di connessione unificati, confini di transazione chiari, timeout, pooling e gestione pulita delle eccezioni. Tipiche misure di refactoring in quest’area:

  • Uniformare la gestione delle connessioni: factory/provider centrale invece di „ogni maschera ha la sua connessione“.
  • Rendere le transazioni esplicite: Begin/Commit/Rollback come parte del caso d’uso, non nascosti nella UI.
  • Usare query parametrizzate in modo coerente per ridurre i rischi di SQL injection e i problemi con caratteri speciali.
  • Definire timeout e retry, in modo che blocchi di rete non provochino maschere „congelate“.

Per l’operatività IT è importante che le nuove strategie di connessione siano concordate con la gestione del database (es. connessioni massime, dimensione del pool, gestione dei deadlock, finestre di manutenzione per modifiche allo schema).

Unit-Abhängigkeiten und „globale Zustände“ als Hauptursache für Seiteneffekte

Delphi-Units con grandi sezioni di interfaccia, molte voci Uses e singleton globali sono tipici acceleratori di effetti collaterali. Una piccola modifica in una unit provoca ricompilazioni a catena o rompe sequenze di inizializzazione nascoste.

Passi pragmatici che si sono dimostrati efficaci nei progetti legacy:

  • Definire le direzioni di dipendenza: p.es. UI → Application Services → Domain/Logik → Data Access → Infrastruktur.
  • Centralizzare l’inizializzazione: sequenza di avvio chiara invece di Unit-Initialization come controllo nascosto.
  • Ridurre le variabili globali: mantenere lo stato in oggetti, chiarire durata e ownership.

Questo migliora la stabilità: se l’avvio è deterministico, i guasti dopo aggiornamenti o modifiche di configurazione sono più gestibili.

Threading und Synchronisation: Stabilität vor „Performance-Optimierung“

Molte applicazioni legacy diventano concorrenti nel tempo: import in background, polling, comunicazione con dispositivi, elaborazione parallela. Senza regole chiare nascono deadlock, blocchi dell’interfaccia o race conditions (conflitti d’accesso dovuti a esecuzione simultanea).

Per il funzionamento e il supporto questo rappresenta un problema, perché genera spesso errori «non riproducibili». Il refactoring dovrebbe qui mirare a standard:

  • Responsabilità chiara per thread/task e uno shutdown definito (in modo che aggiornamenti/arresto non restino bloccati).
  • Logging per worker con ID di correlazione, per ricostruire i flussi.
  • Minimizzare la sincronizzazione e incapsulare rigorosamente gli accessi alla UI (regola del UI-Thread).

Se desiderate approfondire, è sensato inserire un link interno a un articolo sui pattern robusti con TThread e Synchronize, poiché l’argomento è spesso il collo di bottiglia per la stabilità nel refactoring di sistemi legacy.

Obiettivo architetturale: Layering come strumento, non dogma

Un’immagine obiettivo praticabile per molte soluzioni Delphi esistenti è una struttura a layer chiara (spesso intesa come «3 livelli»): presentazione (UI), logica applicativa (Use Cases/Services) e accesso ai dati (Repositories/DAO). È cruciale la prospettiva operativa: il layering facilita i test, gli aggiornamenti e l’eventuale estrazione successiva di interfacce.

Vantaggi concreti per le aziende:

  • Integrare interfacce (p. es. API REST), senza che la logica UI debba essere copiata.
  • Modernizzazione parziale: un cambio di database o la migrazione a BDE-Ablosung mit nativer Anbindung può essere confinata a un unico layer.
  • Manutenzione: i bug si isolano più rapidamente perché le responsabilità nel codice sono più chiare.

Un’immagine obiettivo realistica considera che i sistemi legacy raramente diventano «puliti». Ciò che conta è che la direzione sia corretta e che le nuove modifiche non erodano nuovamente la struttura.

Strategia di test per il refactoring di Delphi: come congelare il comportamento prima di ristrutturare

Il refactoring senza test è un rischio nei sistemi critici per il business. Allo stesso tempo l’automatizzazione completa dei test spesso non è realistica nel breve periodo. Il principio centrale è quindi: testare in modo mirato dove il rischio e la pressione delle modifiche sono elevati.

Golden Master e regressione: pratico per i sistemi legacy

Un «Golden Master» è una referenza del comportamento attuale: input e output attesi vengono registrati per rilevare deviazioni dopo le modifiche. È adatto per report, calcoli, export, pipeline di importazione o risposte delle interfacce.

Importante per l’operatività: i test Golden-Master riducono il rischio che gli effetti collaterali emergano solo dopo il rollout — e supportano decisioni rapide sui hotfix, perché la deviazione diventa concretamente misurabile.

Test di integrazione intorno al database e alle interfacce

Molti errori non nascono nella sola logica di dominio, ma ai confini di sistema: transazioni, encoding (es. Unicode), timestamp, separatori decimali, permessi, interruzioni di rete. I test di integrazione dovrebbero quindi coprire almeno i seguenti punti:

  • Comportamento delle transazioni in caso di errori (rollback, aggiornamenti parziali, blocchi).
  • Encoding in import/export (CSV, XML, JSON), in particolare per i caratteri speciali.
  • Profili di performance per volumi tipici di dati, per rilevare degradi graduali delle prestazioni.

I test manuali restano – ma strutturati

Dove manca (ancora) l’automazione, aiutano piani di test manuali strutturati, collegati ai release. Dal punto di vista amministrativo è rilevante che i casi di test includano anche aspetti operativi: percorso di installazione/aggiornamento, permessi, configurazione, logging/monitoring, stampanti/PDF, percorsi di rete.

Dati e migrazione: il refactoring viene spesso deciso a livello di schema

In Delphi-Systemen sind Datenbankstrukturen über Jahre gewachsen. Refactoring kollidiert häufig mit „historischen“ Tabellen, doppelten Feldern oder fachlich überladenen Spalten. Der kritische Punkt: Schemaänderungen betreffen Betrieb, Backup/Restore, Replikation, Reporting und Schnittstellen.

Schemaänderungen planbar machen

Bewährt ist ein Ansatz mit klar versionierten Datenbankmigrationen: Jede Änderung am Schema wird als reproduzierbarer Schritt dokumentiert, inklusive Rollback-Strategie. Selbst wenn Migrationen zunächst manuell ausgeführt werden, ist die Disziplin entscheidend: keine „wir ändern schnell in Produktion“.

Für Release-Sicherheit sollten Sie festlegen:

  • Downtime-Bedarf: Online-Migration möglich oder Wartungsfenster notwendig?
  • Rückfallstrategie: Datenkompatibilität bei Rollback, Backups vor Migration, Wiederanlaufplan.
  • Kompatibilitätsphase: Applikation kann für eine Übergangszeit mit altem und neuem Schema arbeiten (z. B. zusätzliche Spalten, Views).

Datenqualität und Bereinigung nicht unterschätzen

Ein Refactoring deckt oft Datenprobleme auf, die vorher „mitgeschwommen“ sind: ungültige Werte, Inkonsistenzen, fehlende Fremdschlüssel. Hier ist es wichtig, fachlich zu entscheiden, was korrekt ist. Technisch sollte die Anwendung künftig sauberer validieren und Fehler nachvollziehbar protokollieren, statt still zu korrigieren.

Schnittstellen nachrüsten, ohne das Legacy-System zu destabilisieren

Viele Unternehmen refactoren Delphi-Bestände, weil neue Anforderungen Integrationen erzwingen: Portale, BI, mobile Prozesse, Partneranbindungen. Der häufigste Fehler ist, Schnittstellen direkt aus UI-Logik oder „irgendwo aus dem Code“ zu speisen. Besser ist, Schnittstellen auf eine konsolidierte Service-Schicht zu setzen, die bereits beim Refactoring entsteht.

Wenn eine REST-API (Representational State Transfer, übliche Web-API über HTTP/JSON) nachgerüstet wird, sind aus Betriebs- und Sicherheitsblick besonders wichtig:

  • AuthN/AuthZ: Authentifizierung und Autorisierung sauber trennen; z. B. Tokens, SAML 2.0 im Umfeld von Unternehmens-SSO, klare Rollenmodelle.
  • Rate Limits und Timeouts: damit externe Aufrufer das Backend nicht blockieren.
  • Versionierung: API-Versionen definieren, um Clients nicht bei jeder Änderung zu brechen.
  • Observability: strukturierte Logs, Korrelations-IDs, Metriken (Fehlerquoten, Latenzen).

Ein interner Link zu einem vertiefenden Beitrag über das Nachrüsten einer REST-API für Bestandssoftware kann hier inhaltlich sehr gut anschließen, weil Schnittstellen in Modernisierungsprojekten selten ein „Add-on“ sind, sondern ein eigenes Betriebsprodukt.

Sicherheit und Compliance: Refactoring als Gelegenheit, Sicherheitslücken zu schließen

Legacy bedeutet oft: Sicherheitsannahmen sind älter als heutige Bedrohungslagen. Beim Refactoring sollten Sie mindestens prüfen, ob das System an folgenden Stellen nachgezogen werden muss:

  • Credentials und Secrets: keine Passwörter in INI-Dateien oder im Code; sichere Ablage und Rotation.
  • Transportverschlüsselung: TLS für Schnittstellen, saubere Zertifikatsverwaltung.
  • Least Privilege: Datenbank-User und Dateirechte so minimal wie möglich; getrennte Rollen für Lesen/Schreiben/Administration.
  • Auditabilità: modifiche tracciabili ai dati critici (Chi? Cosa? Quando?), senza trasformare i dati di log in problemi di protezione dei dati.
  • Per la direzione IT questo rappresenta un beneficio aziendale centrale: il refactoring non solo riduce i costi di manutenzione, ma può diminuire i rischi legati alla sicurezza e alle verifiche di audit se effettuato in modo strutturato.

    Processo di rilascio e di esercizio: senza una pipeline pulita il refactoring diventa costoso

    Molti progetti legacy Delphi soffrono meno per il codice che per il processo: le build differiscono a seconda della postazione, i rilasci sono manuali, gli errori non possono essere tracciati con precisione. Il refactoring dovrebbe quindi sempre stabilizzare anche il processo di delivery.

    Riproducibilità delle build e gestione delle configurazioni

    Dal punto di vista dell’amministrazione e delle verifiche, è importante che un rilascio sia riproducibile: stesse sorgenti, stesse versioni di compiler/librerie, stesse dipendenze. Questo include configurazioni chiaramente separate per sviluppo, test e produzione (es. endpoint del database, livelli di logging, feature-flag).

    Logging, monitoring e capacità di supporto

    «È successo qualcosa» non basta in esercizio. Il refactoring è un’opportunità per introdurre un logging uniforme: voci di log strutturate, codici di errore univoci, contesto (utente, mandante, commessa, interfaccia) e una chiara separazione tra errori tecnici e validazioni funzionali.

    Per processi con requisiti 24/7 sono inoltre utili:

    • Health Checks (es. connessione al database, accumulo nella coda, consumo di memoria),
    • Allertamento in base alla gravità,
    • Runbooks per il riavvio e le anomalie tipiche.

    Un piano operativo di refactoring in 6 passaggi

    Per evitare che il refactoring si perda nell’operatività quotidiana, aiuta una tabella di marcia chiara, compatibile con i cicli di rilascio. Un approccio comprovato:

    1. Creare una mappa dei rischi e delle modifiche (moduli, interfacce, dati, esercizio).
    2. Stendere una rete di protezione: standard di logging, primi test di regressione/Golden-Master per i percorsi critici.
    3. Tracciare linee di separazione architetturali: strato di servizio e incapsulamento dell’accesso ai dati come «nuova normalità» per le modifiche.
    4. Eseguire il refactoring degli hotspot: i moduli che vengono modificati frequentemente e causano interruzioni (usare statistiche di errore e cronologia delle modifiche).
    5. Consolidare l’accesso ai dati: unificare FireDAC/transazioni/timeout, misurare le prestazioni, verificare i deadlock.
    6. Aprire percorsi di modernizzazione: interfacce (REST), tematiche di piattaforma (Unicode/64-Bit), modernizzazione graduale dell’interfaccia utente, ove opportuno.

    Il nucleo è l’ordine: prima trasparenza e messa in sicurezza, poi interventi strutturali, poi ristrutturazioni più ampie. Così la soluzione rimane erogabile e operativamente stabile.

    Quando il refactoring non basta: segnali per una modernizzazione più ampia

    Esistono situazioni in cui il solo refactoring non risolve il collo di bottiglia. Segnali tipici:

    • Impasse tecnologiche: driver di database non più supportati, componenti non patchabili, dipendenze rigide a 32 bit.
    • Architettura non più adeguata: ad es. l’applicazione dev’essere operata come un ecosistema di servizi, ma tutto è incentrato sull’interfaccia utente.
    • Scalabilità e disponibilità: requisiti di multi-tenancy, alta disponibilità o accesso remoto possono essere soddisfatti solo con modifiche strutturali.
    • Requisiti di sicurezza: autenticazione/SSO, audit, cifratura non sono aggiungibili senza un intervento strutturale significativo.

    Anche in questi casi il Refactoring è spesso una componente sensata: crea ordine per isolare parti mirate, anziché sostituire l’intero sistema in un’unica operazione.

    Conclusione: il Refactoring come responsabilità tecnica nell’operatività

    Legacy-Code in Delphi zu refactoren ist vor allem eine Frage von Priorisierung, Risiko-Management und Betriebsnähe. Wenn Sie mit einer belastbaren Bestandsaufnahme starten, die Hotspots absichern, Datenzugriff und Architekturtrennlinien konsolidieren und Tests sowie Logging gezielt auf kritische Pfade ausrichten, wird aus „Aufräumen“ ein steuerbares Modernisierungsvorhaben. Das Ergebnis ist nicht nur besser lesbarer Code, sondern ein System, das sich zuverlässiger betreiben, sicherer ändern und einfacher integrieren lässt.

    Se desiderate stabilizzare o modernizzare in modo strutturato la vostra Delphi-soluzione esistente, definiamo volentieri insieme la situazione di partenza, i rischi e un percorso realistico di refactoring:

    Nel contesto specialistico assumono inoltre un ruolo importante la Delphi Modernizzazione e Delphi Refactoring, quando integrazioni, flussi di dati e sviluppo devono funzionare insieme in modo ordinato.

    Discutere il progetto o l’intervento di modernizzazione con Net-Base.

    Passo successivo

    Quando un tema diventa un progetto reale, architettura, sistemi esistenti e gestione operativa dovrebbero essere considerati insieme fin dalle fasi iniziali.

    Non forniamo solo supporto per questioni isolate, ma anche quando da frammenti di codice sorgente, tematiche legacy o idee di portale deve nascere un progetto aziendale solido.

    • Stato attuale, stato obiettivo e rischi tecnici vengono valutati insieme.
    • REST, l'accesso ai dati, i portali e il rollout non vengono rinviati a fasi successive.
    • Vede in anticipo quale percorso è economicamente e operativamente sostenibile.

    Condividi il post

    Condividi direttamente questo articolo

    LinkedIn, X, XING, Facebook, WhatsApp e e-mail sono immediatamente disponibili. Per Instagram prepariamo direttamente il link e un breve testo.

    E-mail

    Instagram si apre in una nuova scheda. Il link e il breve testo vengono copiati prima negli appunti.