{"id":73,"date":"2026-01-12T19:19:00","date_gmt":"2026-01-12T18:19:00","guid":{"rendered":"https:\/\/www.matteobononi.it\/blog\/?p=73"},"modified":"2026-01-21T11:24:06","modified_gmt":"2026-01-21T10:24:06","slug":"dal-caos-allordine-la-mia-esperienza-nel-refactoring-di-un-sito-prestashop-1-6-verso-la-versione-9","status":"publish","type":"post","link":"https:\/\/www.matteobononi.it\/blog\/dal-caos-allordine-la-mia-esperienza-nel-refactoring-di-un-sito-prestashop-1-6-verso-la-versione-9\/","title":{"rendered":"Dal caos all\u2019ordine: la mia esperienza nel refactoring di un sito Prestashop 1.6 verso la versione 9"},"content":{"rendered":"<p>Quando si parla di refactoring, di solito si pensa a un processo tecnico, lineare, fatto di codice, test e rilascio. Ma la realt\u00e0, quando si ha a che fare con un sistema come <strong>Prestashop 1.6<\/strong> pesantemente modificato nel tempo, \u00e8 ben diversa: \u00e8 un viaggio tra eredit\u00e0, caos e metodo.<\/p>\n<h2>Il punto di partenza: un mostro di codice cresciuto nel tempo<\/h2>\n<p>Il progetto nasceva su una base Prestashop 1.6, ma nel corso degli anni aveva subito modifiche profonde: override di classi core, estensioni dirette di controller, moduli custom scritti in epoche diverse e senza un vero standard comune. La migrazione verso Prestashop 9 significava quindi solo una cosa: <strong>riscrivere da zero<\/strong>.<\/p>\n<h2>La prima decisione: separare per capire<\/h2>\n<p>Per prima cosa, ho deciso di isolare ogni modulo sviluppato internamente. Per ciascuno di essi ho creato un <strong>repository dedicato<\/strong>, in modo da poter lavorare in modo pulito e indipendente. Questa separazione \u00e8 stata fondamentale per permettere un\u2019analisi mirata: meno rumore, pi\u00f9 contesto.<\/p>\n<h2>L\u2019audit dei moduli: capire prima di agire<\/h2>\n<p>Ogni repository \u00e8 diventato il terreno di lavoro di un agente AI (Copilot, Codex o ChatGPT), a cui ho chiesto di eseguire un audit approfondito: identificare hook, tabelle, UI, logica di business e dipendenze. L\u2019obiettivo non era modificare, ma documentare in modo chiaro <em>cosa facesse<\/em> ogni modulo.<\/p>\n<p>I risultati di questa analisi venivano salvati in una cartella <code>audit_update\/<\/code>, una sorta di archivio tecnico che conteneva tutte le informazioni necessarie per riscrivere il modulo da zero, compatibile con Prestashop 8 e 9.<\/p>\n<h2>Collaborare con l\u2019AI come un team<\/h2>\n<p>In questa fase ho sviluppato un vero e proprio flusso di collaborazione con l\u2019intelligenza artificiale. Ogni modulo passava per pi\u00f9 cicli di analisi e revisione: prima l\u2019audit tecnico, poi la validazione da parte di ChatGPT sugli standard del CMS, quindi eventuali correzioni suggerite a Codex o Copilot. Solo quando tutto era chiaro, si passava alla riscrittura.<\/p>\n<h2>Dall\u2019audit all\u2019AGENTS.md<\/h2>\n<p>Una volta completata l\u2019analisi, il passo successivo era creare un file <code>AGENTS.md<\/code>: un documento guida per gli agenti AI che avrebbero poi generato o modificato il codice. In questo file venivano definiti i ruoli (Auditor, Architect, Coder, Reviewer) e le regole di sviluppo (PSR-12, compatibilit\u00e0 PHP 8.1+, nessun override del core, uso di Symfony Forms, ecc.).<\/p>\n<h2>Nuovo repository, nuova vita<\/h2>\n<p>Da l\u00ec nasceva un nuovo repository \u201cpulito\u201d, che conteneva solo la cartella <code>audit_update\/<\/code> e l\u2019<code>AGENTS.md<\/code>. Niente codice legacy, solo conoscenza e metodo. Era la base epistemica per la fase successiva: il vero sviluppo del modulo nuovo, costruito da zero ma con tutta la consapevolezza accumulata nella fase di audit.<\/p>\n<h2>Il ciclo di raffinamento continuo<\/h2>\n<p>Il processo non \u00e8 mai lineare: ogni modulo passa per pi\u00f9 cicli di prova, revisione e ottimizzazione. Il mantra \u00e8 diventato \u201c<strong>prova, rifinisci, ritenta, torna indietro, fallo due volte e poi ok<\/strong>\u201d. Dopo due iterazioni complete, il codice \u00e8 pulito, stabile, e soprattutto, <em>standard<\/em>.<\/p>\n<h2>Dal caos all\u2019ordine<\/h2>\n<p>Questo approccio mi ha permesso di trasformare un progetto ingestibile in un ecosistema modulare, documentato e scalabile. L\u2019uso coordinato degli strumenti AI ha reso possibile mantenere un livello di qualit\u00e0 e coerenza impossibile da raggiungere manualmente in tempi umani. Il risultato? Moduli Prestashop 9 ben scritti, compatibili, e soprattutto, <strong>manutenibili<\/strong>.<\/p>\n<p>Nel prossimo articolo racconter\u00f2 nel dettaglio il <strong>metodo di lavoro<\/strong> che ho messo a punto \u2014 una vera e propria pipeline AI-driven per la migrazione e il refactoring di moduli legacy.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quando si parla di refactoring, di solito si pensa a un processo tecnico, lineare, fatto di codice, test e rilascio. Ma la realt\u00e0, quando si ha a che fare con un sistema come Prestashop 1.6 pesantemente modificato nel tempo, \u00e8 ben diversa: \u00e8 un viaggio tra eredit\u00e0, caos e metodo. Il punto di partenza: un [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":74,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[56],"tags":[3],"class_list":["post-73","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sviluppo","tag-intelligenza-artificiale"],"_links":{"self":[{"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/posts\/73","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/comments?post=73"}],"version-history":[{"count":1,"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/posts\/73\/revisions"}],"predecessor-version":[{"id":75,"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/posts\/73\/revisions\/75"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/media\/74"}],"wp:attachment":[{"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/media?parent=73"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/categories?post=73"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.matteobononi.it\/blog\/wp-json\/wp\/v2\/tags?post=73"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}