Come sviluppo l'applicazione di utilizzo del database in modo agile / basato sullo sviluppo di test?

6

Desidero aggiungere database (tradizionali RDBMS client / server come Mysql / Postgresql anziché NoSQL o database incorporati) alla mia casella degli strumenti come sviluppatore. Sto usando SQLite per progetti più semplici con solo 1 client, ma ora voglio fare cose più complicate (es. Sviluppo web con db-backed). Di solito mi piace seguire i principi di sviluppo agili e / o basati sui test. Generalmente codice in Perl o Python. Domande:

  1. Come faccio a testare il mio codice in modo tale che ogni esecuzione della suite di test inizi con uno stato "pristine"? Eseguo un'istanza separata del server del database ogni test? Utilizzo un database temporaneo?
  2. Come posso progettare tabelle / schemi in modo che siano flessibili rispetto ai requisiti in evoluzione?
  3. Comincio con un ORM per la mia lingua? O mi limito a codificare manualmente SQL? Una cosa che non trovo attraente è dover cambiare più di una cosa (ad esempio, l'istruzione CREATE TABLE e le relative istruzioni crude) per una modifica, b / c che è soggetta a errori. D'altra parte, mi aspetto che gli ORM siano un po 'più lenti e difficili da debug rispetto a SQL raw.
  4. Qual è la strategia generale per la migrazione dei dati tra una versione del programma e una nuova? Scrivo attentamente le istruzioni ALTER TABLE tra ciascuna versione, oppure scarico i dati e li importa nella nuova versione?
posta user39019 08.10.2012 - 03:03
fonte

2 risposte

2

Alcune risposte:

  1. Dovresti avere uno script di inizializzazione che ricostruisce il database nello stato "pristine" per i test di integrazione. Ciò sarà utile anche quando si esegue l'installazione per assicurarsi che il database iniziale sia inizializzato correttamente. Per i test delle unità, è possibile prendere in giro i dati con le schede di memoria in memoria del database per eseguire test più rapidi e ridurre la dipendenza. Esistono diverse strategie per il mocking a seconda dell'ORM o del livello di accesso ai dati scelto.
  2. Prova a modellare il tuo schema DB in modo che assomigli il tuo modello di dominio dell'applicazione il più possibile quando progetti le entità, gli attributi e le relazioni. Alcuni ORM possono aiutarti a farlo automaticamente generando il database dalle classi dell'applicazione.
  3. Gli ORM possono essere utili per ridurre il codice della piastra della caldaia e possono aiutare ad affrontare le altre domande qui sollevate. Di solito sono più lenti dei metodi SQL raw, ma il tempo di sviluppo ridotto può compensare questi problemi.
  4. Scrivi (o genera se l'ORM può farlo) le istruzioni SQL per l'aggiornamento alla versione successiva e anche le istruzioni per tornare alla versione precedente dopo l'aggiornamento nel caso sia richiesto. Assicurati inoltre che questi (e qualsiasi altro codice di database) siano impegnati nel tuo repository di controllo di origine come qualsiasi altro codice di applicazione.
risposta data 08.10.2012 - 06:47
fonte
1

Le caratteristiche e le domande che sono state poste possono essere trovate in un buon tool ORM.

Ad esempio, in Entity Framework ORM siamo in grado di avere un approccio alla modellazione dello schema del database nel codice tramite i modelli. E migrare in modo incrementale le modifiche al database effettivo dell'applicazione. - Questo approccio è codice primo approccio in EF a partire dalla versione 4.1.

Sebbene in precedenza EF supportasse solo il server MS SQL, al giorno d'oggi supporta anche tutti gli altri principali database. Pertanto, vorrei esaminare i framework ORM che soddisfano le tue esigenze.

In alternativa puoi anche consultare NHibernate: codice Primo approccio con fluente NHibernate

    
risposta data 08.10.2012 - 03:19
fonte

Leggi altre domande sui tag