Ecco l’Audit Architetturale Aggiornato (v2.0).
Questa versione supera il bias accademico iniziale e incorpora le critiche pragmatiche (Qt Lifecycle, Thread Safety reale, State Ownership) emerse durante la revisione.
Tabella Comparativa Maturata
| Caratteristica | 1. Singleton (Davide) | 2. DI Esplicita + Worker Snapshot (Gianni) | 3. Event Driven / Observer |
|---|---|---|---|
| Filosofia | Pragmatismo Qt. “Esiste una sola Configurazione, rendiamola globale e accessibile.” | Architettura Pulita. “Le dipendenze sono contratti espliciti. Niente stati occulti.” | Reattività. “Lo stato è fluido. Se cambia qualcosa, chi è interessato si aggiorna.” |
| Risoluzione Bug | ✅ Immediata. Tutte le classi accedono alla stessa area di memoria statica. | ✅ Strutturale. Si elimina la creazione di istanze multiple alla radice (Composition Root). | ✅ Funzionale. Sincronizza istanze diverse tramite messaggi. |
| Qt Integration | 🟡 Media. Funziona, ma ignora il modello parent-child di Qt. | 🔴 Bassa (Ripple Effect). Richiede di passare oggetti a cascata attraverso costruttori, faticoso in UI complesse. | 🟢 Nativa. Usa Signals & Slots, l’idioma base di Qt. |
| Thread Safety | ⚠️ Rischiosa. Richiede Lock manuali. I worker leggono memoria condivisa mentre la UI scrive. | 🟢 Massima (tramite Snapshot). Il Worker riceve una copia del valore (bool) alla nascita. Zero race conditions. | ⚠️ Complessa. Bisogna gestire l’aggiornamento dello stato mentre i thread girano. |
| Testabilità | 🔴 Bassa. Difficile resettare lo stato tra un test e l’altro. Mocking complesso. | 🟢 Eccellente. Si iniettano MockSettings nei test senza toccare file o globali. | 🟡 Media. Richiede un Event Loop attivo per i test. |
| Manutenzione | 🟢 Facile (scrivi una volta). Rischio “Spaghetti Code” se abusato. | 🟡 Media (Boilerplate). Aggiungere un setting richiede modifiche a catena nelle firme. | 🔴 Difficile. Il flusso di controllo non è lineare (“Chi ha lanciato questo segnale?”). |
| State Ownership | Il Modulo. La classe stessa detiene lo stato. | Il Main. La radice dell’app possiede lo stato e lo presta. | Distribuita. Lo stato è replicato e sincronizzato. |
| Aspetto | Singleton | DI + Snapshot | Il Mio Voto |
|---|---|---|---|
| Risolve il bug? | ✅ Sì | ✅ Sì | 🤝 Pari |
| Thread Safety per bool | 🟢 Naturale (GIL) | 🟢 Garantita (immutabile) | 🏆 Snapshot (design superiore) |
| Complessità implementazione | 🟢 Minima (~50 LOC) | 🟡 Media (~200 LOC) | 🏆 Singleton (pragmatismo) |
| Testabilità | 🔴 Difficile | 🟢 Eccellente | 🏆 DI (pro testing) |
| Qt Idiomatic | 🟡 Accettabile | 🔴 Contro-idiomatica | 🏆 Singleton (Qt style) |
| Riusabilità moduli | 🔴 Accoppiamento globale | 🟢 Massima | 🏆 DI (architettura) |
| Debugging | 🟢 Lineare | 🟡 Richiede tracing | 🏆 Singleton (semplicità) |
| Scalabilità | 🔴 Diventa spaghetti | 🟢 Cresce bene | 🏆 DI (long-term) |