Categoria

Pagina 5 di 5

Refactoring: migliorare il codice esistente senza rompere il business

Fare refactoring vuol dire trasformare una codebase confusa, fragile o lenta in qualcosa di leggibile e testabile, tenendola in produzione mentre la modifichi. È il lavoro meno appariscente che uno sviluppatore senior possa fare, e uno dei più utili. In questa categoria raccolgo il metodo con cui si interviene su codice reale, quello che le aziende hanno davvero, lontano dagli esempi dei tutorial.

Spesso si parte dal subentro sull'ignoto. Molto del mio lavoro comincia con una base ereditata, senza documentazione, spesso dopo la sparizione dello sviluppatore originale: migliaia di righe da capire, credenziali da recuperare, un business che intanto deve continuare a girare. Scrivo del metodo per mappare in pochi giorni cosa hai davanti, del reverse engineering sistematico e del protocollo delle prime ore quando la situazione è un'emergenza.

Poi viene la modernizzazione senza rotture: portare avanti una base PHP legacy o un framework fuori supporto attraverso le versioni, gestendo i cambi di comportamento silenziosi, che sono il rischio più insidioso. La metrica che conta è il rischio di regressione, e l'approccio è incrementale, misurabile e reversibile, così che il software funzioni come prima ma diventi finalmente modificabile.

Infine il debito tecnico come questione aziendale. Il debito ha un costo che si può calcolare e presentare al management, e decidere quando pagarlo è una scelta strategica. Racconto come si porta questa conversazione fuori dal reparto tecnico, dove le decisioni si prendono davvero.

Se hai una codebase che rallenta il team, vedi la consulenza IT e DevOps o parliamone.

Il refactoring ben fatto si vede dal fatto che nessuno se ne accorge: il software funziona come prima, ma adesso si può toccare senza paura.

L'helper once() in Laravel 12: memoizzazione per-request con WeakMap al posto di proprietà statiche e cache forzata

L'helper once() in Laravel 12: memoizzazione per-request con WeakMap al posto di proprietà statiche e cache forzata L'helper once(), introdotto in Laravel 11 (PR #49744, Nuno Maduro), usa internamente una WeakMap di PHP 8.0 per cachare il risultato di una closure per la durata della request. In metodi d'istanza la cache è per-oggetto, in metodi statici è per-classe, in contesto globale è per call-site. In Octane, FlushOnce esegue Once::flush() tra le request. Continua a leggere
Ultima modifica:

Event discovery in Laravel 12: da EventServiceProvider a auto-discovery per listener disaccoppiati e testabili

Event discovery in Laravel 12: da EventServiceProvider a auto-discovery per listener disaccoppiati e testabili L'event discovery scansiona automaticamente i listener nella directory app/Listeners e li registra in base al type-hint del metodo handle(). Introdotto in Laravel 5.8.9 come opt-in, è diventato il default da Laravel 11 con la rimozione dell'EventServiceProvider dallo skeleton. Il risultato: zero configurazione manuale, listener auto-registranti e testabili con Event::fake(). Continua a leggere
Ultima modifica:

Validazione in Laravel 12: da closure inline a Rule Objects con ValidationRule per regole testabili, riutilizzabili e type-safe

Validazione in Laravel 12: da closure inline a Rule Objects con ValidationRule per regole testabili, riutilizzabili e type-safe L'interfaccia ValidationRule, introdotta in Laravel 10, ha sostituito la vecchia Rule con passes()/message() e InvokableRule, entrambe deprecate. Un unico metodo validate() con closure $fail permette regole testabili in isolamento, parametrizzabili via costruttore, e riutilizzabili su più Form Request senza duplicazione. Continua a leggere
Ultima modifica:

Concurrency::run() in Laravel: esecuzione parallela di task I/O-bound senza code, worker o estensioni pcntl

Concurrency::run() in Laravel: esecuzione parallela di task I/O-bound senza code, worker o estensioni pcntl Concurrency::run() è stato introdotto in Laravel 11.23 e stabilizzato in Laravel 12. Il driver process (default) serializza le closure, le esegue in processi PHP figli separati via Artisan, e restituisce i risultati al processo padre. Non usa fibers né thread - ogni task ha il proprio bootstrap completo dell'applicazione. Continua a leggere
Ultima modifica:

Refactoring applicazione Laravel 10: guida passo-passo per adottare la struttura snella di Laravel 12 e centralizzare la configurazione

Refactoring applicazione Laravel 10: guida passo-passo per adottare la struttura snella di Laravel 12 e centralizzare la configurazione Laravel 11 ha introdotto la struttura slim che elimina Http/Kernel, Console/Kernel e la maggior parte dei Service Provider, centralizzando tutto in bootstrap/app.php. La guida ufficiale dice che la migrazione non è obbligatoria - ma in un applicativo con logica custom sparsa tra Kernel e Provider, adottarla riduce il boilerplate e la superficie di manutenzione. Continua a leggere
Ultima modifica:

Feature flag in Laravel: modernizzare la gestione da approcci custom L9/L10 a Laravel Pennant per applicazioni aziendali scalabili in L12

Feature flag in Laravel: modernizzare la gestione da approcci custom L9/L10 a Laravel Pennant per applicazioni aziendali scalabili in L12 Le feature flag gestite con config() e tabelle custom generano debito tecnico che cresce con ogni funzionalità aggiunta. Laravel Pennant offre definizioni class-based, scoping per utente o tenant, rollout percentuali e un'API di testing che semplifica la migrazione da approcci legacy. Continua a leggere
Ultima modifica:

Applicativi Symfony e debito tecnico nelle PMI: come passare dalla configurazione legacy dei servizi all'efficienza di autowiring e attributi in Symfony 6 e 7

Applicativi Symfony e debito tecnico nelle PMI: come passare dalla configurazione legacy dei servizi all'efficienza di autowiring e attributi in Symfony 6 e 7 Molte PMI si affidano ad applicativi Symfony appesantiti da configurazioni legacy dei servizi. Scopri come autowiring e attributi PHP in Symfony 6/7 riducono il debito tecnico, migliorano la manutenibilità e preparano il codebase per gli aggiornamenti futuri. Continua a leggere
Ultima modifica:

Aggiornare applicazioni PHP legacy: confrontare la transizione da Symfony 3.4 a Symfony 7 e da Laravel 5.8 a Laravel 11/12 per la sicurezza e le performance dei software PMI

Aggiornare applicazioni PHP legacy: confrontare la transizione da Symfony 3.4 a Symfony 7 e da Laravel 5.8 a Laravel 11/12 per la sicurezza e le performance dei software PMI Molte PMI si affidano ad applicativi PHP basati su Symfony 3.4 o Laravel 5.8, framework privi di supporto attivo per la sicurezza. Questo articolo analizza le sfide e i vantaggi strategici dell'aggiornamento a Symfony 7.x e Laravel 11/12, confrontando l'approccio "rattoppo" con una migrazione pianificata e mostrando i guadagni concreti in sicurezza, performance e manutenibilità. Continua a leggere
Ultima modifica:

Refactoring di moduli business-critical in gestionali PHP legacy: strategie con Laravel e Symfony per la stabilità

Refactoring di moduli business-critical in gestionali PHP legacy: strategie con Laravel e Symfony per la stabilità Molti gestionali PHP delle PMI italiane soffrono di codice legacy datato e difficile da manutenere. Moduli critici come fatturazione e gestione clienti diventano colli di bottiglia. Questo articolo esplora strategie di refactoring con Laravel e Symfony, mostrando come i test automatici con PHPUnit e Pest trasformino questa sfida in un investimento sicuro per stabilità ed efficienza. Continua a leggere
Ultima modifica:

Strumenti utili per il refactoring

Tool gratuiti per analizzare il codice esistente:

Audit del composer.lock, Regex tester.