Categoria

Pagina 4 di 5

Refactoring: migliorare il codice esistente senza rompere il business

Refactoring non è riscrivere tutto da capo. È il lavoro meno appariscente e più prezioso che uno sviluppatore senior possa fare: trasformare una codebase confusa, fragile o lenta in qualcosa di leggibile e testabile, tenendola in produzione mentre la modifichi. In questa categoria raccolgo il metodo con cui si interviene su codice reale, quello che le PMI hanno davvero, non quello dei tutorial.

Il primo tema è il 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.

Il secondo tema è 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 vero rischio. La metrica che conta è sempre il rischio di regressione, e l'approccio è incrementale, misurabile e reversibile, così che il software funzioni come prima ma diventi finalmente modificabile.

Il terzo tema è il debito tecnico come questione aziendale. Il debito non è un problema estetico da sviluppatori: ha un costo che si può calcolare e presentare al management, ed è una scelta strategica decidere quando pagarlo. 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.

Perché il refactoring del codice legacy non è solo una scelta tecnica, ma una strategia aziendale vincente

Perché il refactoring del codice legacy non è solo una scelta tecnica, ma una strategia aziendale vincente Il refactoring del codice legacy, specialmente in PHP, non è solo un intervento tecnico: è una strategia aziendale essenziale per evitare vulnerabilità di sicurezza, ridurre costi nascosti e migliorare significativamente le performance operative. Scopri perché modernizzare il codice significa investire nella crescita a lungo termine della tua azienda. Continua a leggere
Ultima modifica:

Migrazione al cloud: opportunità reale o moda pericolosa per la tua azienda?

Migrazione al cloud: opportunità reale o moda pericolosa per la tua azienda? La migrazione al cloud può sembrare la soluzione ideale, ma se gestita male espone la tua azienda a rischi gravi e costi imprevisti. Scopri quando il cloud diventa una scelta strategica vantaggiosa, quali sono gli errori più comuni da evitare, e perché affidarsi a un consulente IT esperto è fondamentale per una transizione sicura e profittevole. Continua a leggere
Ultima modifica:

CodeIgniter vs Laravel nel 2026: quando una PMI deve davvero migrare e come farlo senza fermarsi

CodeIgniter vs Laravel nel 2026: quando una PMI deve davvero migrare e come farlo senza fermarsi CodeIgniter 3 è in maintenance-only, PHP 8.1 ha raggiunto EOL il 31 dicembre 2025 e il JetBrains State of PHP 2024 stima 61% Laravel vs 11% CodeIgniter. Per le PMI con applicativi CI3 in produzione il problema non è più "se" migrare ma "come" farlo senza fermare il business. Questo articolo confronta CI3, CI4 e Laravel 12 con un approccio operativo: strangler pattern, route bridge e cutover graduale. Continua a leggere
Ultima modifica:

Controller base Laravel 12: da AuthorizesRequests e ValidatesRequests impliciti a Form Request, Gate e composizione esplicita

Controller base Laravel 12: da AuthorizesRequests e ValidatesRequests impliciti a Form Request, Gate e composizione esplicita Il PR #6188 "Slim skeleton" di Taylor Otwell ha rimosso AuthorizesRequests e ValidatesRequests dal Controller base di Laravel 11. La motivazione: "$this->validate has not been documented in some time. $this->authorize can simply be Gate::authorize." Le Form Request (introdotte in Laravel 5.0, febbraio 2015) e il facade Gate sostituiscono i trait impliciti con composizione esplicita - il principio "favor composition over inheritance" del Gang of Four applicato al framework. Continua a leggere
Ultima modifica:

Fat Controller in Laravel 12: dal controller da 200 righe a Service Layer, Action pattern e Dependency Injection

Fat Controller in Laravel 12: dal controller da 200 righe a Service Layer, Action pattern e Dependency Injection Robert C. Martin definisce il Single Responsibility Principle come "un modulo deve essere responsabile verso un solo attore". Un controller Laravel che valida input, calcola totali, aggiorna stock, crea record e invia notifiche ha almeno cinque motivi per cambiare. Il Service Layer (Fowler, PoEAA) e l'Action pattern (Freek Van der Herten) estraggono la logica di business dal controller, e il Service Container di Laravel la rende iniettabile e testabile in isolamento. Continua a leggere
Ultima modifica:

Health check applicativi Laravel 12: da controller custom a Health Routing con DiagnosingHealth e spatie/laravel-health

Health check applicativi Laravel 12: da controller custom a Health Routing con DiagnosingHealth e spatie/laravel-health L'Health Routing di Laravel, introdotto in Laravel 11 (PR #47309), espone un endpoint /up che dispatcha l'evento DiagnosingHealth - i listener che lanciano eccezioni causano HTTP 500, altrimenti HTTP 200. È un check pass/fail per load balancer e Kubernetes probes. Per monitoring dettagliato con dashboard e notifiche, spatie/laravel-health (10M+ install) offre 16+ check integrati. AWS Builders' Library documenta il trade-off tra shallow e deep health check. Continua a leggere
Ultima modifica:

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:

Strumenti utili per il refactoring

Tool gratuiti per analizzare il codice esistente:

Audit del composer.lock, Regex tester.