Attualmente sto lavorando al progetto C ++, che può essere classificato come progetto "legacy". Un sacco di codice scritto scadente è stato commesso a causa della mancanza di esperienza e sotto la pressione delle scadenze. Quando provo a correggere i bug, alla fine ne realizzo uno nuovo.
Recentemente ho avuto un po 'di tempo libero e voglio migliorare questo progetto. Per essere precisi voglio iniziare a usare TDD. Tuttavia, si è rivelato non così facile. Ho affrontato il problema che non posso scrivere test per nessuna classe. I singleton sono ovunque. Anche le classi base usano membri statici.
Ad esempio, nel progetto usiamo ampiamente la classe "Numeric" (che è wrapper per la libreria decNumber C per il calcolo decimale). Questa classe ha membri statici per mantenere un contesto (precisione, modalità di arrotondamento, ecc.). È ovvio che ho bisogno di refactoring questa classe per evitare campi statici.
Ho subito pensato all'iniezione di dipendenza e a un modello di fabbrica. La factory manterrà il singolo contesto, ogni classe utente dovrebbe creare istanze numeriche solo usando quella factory. Ma il codice sarà disordinato perché la fabbrica dovrebbe essere iniettata in ogni classe che vuole costruire l'istanza "numerica".
Quale modello posso usare per questo caso? Quale mi fa essere sicuro che ogni istanza della classe "Numeric" utilizza un singolo stato condiviso?
PS: ci sono parallelismi significativi con questa domanda - Dipendenza iniezione ; buone pratiche per ridurre il codice boilerplate .