Database Facade per racchiudere le nostre query esistenti?

7

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:

  1. Incapsula tutte le chiamate al database dietro questa facciata.
  2. 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.

    
posta Jean-François Côté 08.04.2013 - 19:39
fonte

2 risposte

1

Come suggerisce il tuo aggiornamento, lo schema del repository sarebbe in grado di aiutare a separare le chiamate al database dall'interfaccia utente. E sostituire le chiamate al database con le chiamate a un'interfaccia IDatabase è certamente un miglioramento. Il modello di repository ti consentirà di astrarre ulteriormente il recupero dei dati in qualcosa di significativo per l'applicazione. UserRepository, ThingRepository, ecc.

link

Come approccio per l'implementazione di questa architettura. Quando ho bisogno di rendere il codice testabile al refactor, il primo test è sempre il più difficile. Trova un pezzo di codice ben compreso che vuoi testare e rendere testabile quella classe / metodo. Una volta che questo è in atto, è la persistenza e la pazienza che ti consentiranno di completare il compito di introdurre la nuova architettura nel sistema legacy.

    
risposta data 11.06.2013 - 19:22
fonte
-1

I have read the book Working Effectively With Legacy Code, and one of the most important things to do first is to create some kind of architecture so we can separate the GUI from the logic and from the database.

Sarebbe come leggere il codice legacy e quindi riscrivere il sistema in una nuova piattaforma. Ma non puoi onestamente aspettarti di farlo realmente nel codice legacy stesso. Aggiungere l'architettura al codice legacy dopo il fatto ... che non sembra fattibile nel mondo reale.

    
risposta data 01.05.2013 - 00:50
fonte

Leggi altre domande sui tag