PDA

View Full Version : [Design/C#] - Migration tool


Kralizek
29-08-2011, 19:22
é quasi un anno che in azienda stiamo lavorando ad una versione riscritta da zero della piattaforma attuale. Oltre alle varie migliorie introdotte a livello di codice (nuove tecnologie utilizzate) abbiamo sul groppone anche un bel database nuovo in cui dobbiamo riversare tutti i dati del database attualmente in produzione.

Ovviamente stiamo salvando quasi tutte le query usate in fase di sviluppo, ma ci sono alcune conversioni che sono state eseguite tramite codice non sql.

L'idea era quindi quella di costruire un'applicazione "modulare" che permettesse a ciascun membro del team di creare un modulo, eventualmente dipendente da altri moduli, che si occupi della "traduzione" di una parte di database.

Il problema é che non riesco a trovare un modo per "sincronizzare" le varie operazioni, ad esempio una tabella potrebbe avere una FK verso un altro modulo.

Le operazioni che ho trovato fino ad ora sono (non in ordine):


creazione di uno schema
creazione di uno schema xml
definizione di tabelle
definizione di funzioni / stored procedure che lavorano su tabelle
definizione di funzioni che lavorano su dati non dipendenti da tabelle (e.g. supporto alle regex)
definizione di indici e chiavi esterne
definizione di viste
query per importare i dati (sql to sql) (e.g. "INSERT INTO ... SELECT ... FROM ..." )
importazione di dati processati in codice non sql


Avevo pensato ad un'interfaccia di questo tipo:


public interface IMigrationModule
{
IEnumerable<Type> GetDependencies();

IEnumerable<Step> GetSteps();
}

public abstract class Step
{

}

public class CreateSchema : Step
{
...
}

public class CreateXmlSchema : Step
{
...
}


Ma non ho idea di che granularitá dare ai moduli e, soprattutto, ho una paura fottuta di perdermi nella gestione delle dipendenze dei moduli.

Ma soprattutto, il problema principale é la "dipendenza a metá" nel senso che un certo modulo puó essere indipendente da un altro modulo fino ad un certo punto e poi esserne dipendente (e.g. una chiave esterna)

O anche... se due tabelle hanno referenze incrociate, come risolvo?

Non cerco la soluzione definitiva, ma magari una bella discussione ispiratrice. Come vedete la cosa non é strettamente legata al linguaggio, quindi sono tutti i benvenuti pitoniani e tazzinari inclusi :D