Abbiamo un'applicazione molto grande scritta in C ++ usando il framework MFC (milioni di righe di codice). Non c'è bisogno di dire che è un sistema legacy, ma è anche molto mantenuto e aggiornato. Questa applicazione manca di molta architettura. Ad esempio, abbiamo un sacco di classi che eseguono query direttamente nel database, il che crea molte difficoltà per il test delle unità.
Ho letto il libro Lavorare efficacemente con il codice legacy e una delle cose più importanti da fare prima è creare un qualche tipo di architettura in modo da poter separare la GUI dalla logica e dal database.
La mia idea di andare verso questo è creare qualcosa come una facciata di un database. Ci saranno 2 obiettivi per questo:
- Incapsula tutte le chiamate al database dietro questa facciata.
- Essere in grado di testare la facciata in batch per rilevare errori in SQL molto velocemente.
La stessa facciata del database implementerà un'interfaccia IDatabaseXXXX in modo da poter essere facilmente derisa nei test delle unità. Il secondo obiettivo sarà essere in grado di eseguire tutte le funzioni nella facciata in batch per verificare se ci sono errori nelle query SQL. Non li considero come test unitari e li eseguirò solo una volta al giorno.
La mia preoccupazione principale su questo è che non so se esiste una struttura o una libreria esistente per occuparsi di questa astrazione. Per quanto ne so, ce ne sono alcuni su altre piattaforme come .NET, ma sembra che per C ++ o MFC non ci siano molte opzioni. Come ho detto, l'applicazione è molto grande e il cambiamento verrà effettuato lentamente, soprattutto quando nuove query verranno aggiunte al software.
Penso che sia una buona cosa aggiungere che abbiamo anche un sacco di recordset (uno per quasi ogni oggetto). Per il momento, non so come gestirli, quindi li ho tenuti da parte e ho deciso di occuparmi delle normali query SQL. Ma se hai suggerimenti per gestire i recordset, sarò lieto di ascoltarli.
Quindi la mia domanda principale è: è tutta questa idea della facciata del database che vale la pena provare? C'è qualche libreria di framework per aiutarmi in questa avventura? Se ci sono programmatori C ++ / MFC là fuori, come gestisci l'astrazione della query nel database?
Grazie!
Modifica
Alcuni utenti della chat suggeriscono di cercare il modello di repository che conoscevo dal mondo di MVC 3. Qualche suggerimento o tutorial sul pattern di repository in C ++? La maggior parte di ciò che ho trovato è nel mondo .NET.