Questo è il mio scenario, ho questa interfaccia:
public interface hitTheDataBase
{
public void insertMe(String [] values);
public void modifyMe(String [] values);
public DataTable selectMe();
}
E ho queste due classi che implementano l'interfaccia:
public Class hitSqlServer implements hitTheDatabase
{
public void insertMe(String [] values)
{
executes insert into table_in_sqlServerBD (col1, col2) values(values[0], values[1])
}
public void modifyMe(String [] values)
{
executes update table_in_sqlServerBD set col1 = values[0], col2 = values[1] where rowid = values[3]
}
public DataTable selectMe()
{
executes select col1, col2 from table_in_sqlServerBD
}
}
public Class hitSqLite implements hitTheDatabase
{
public void insertMe(String [] values)
{
executes insert into table_in_sqLite (col1, col2) values(values[0], values[1])
}
public void modifyMe(String [] values)
{
executes update table_in_sqlLite set col1 = values[0], col2 = values[1] where rowid = values[3]
}
public DataTable selectMe()
{
executes select col1, col2 from table_in_sqLite
}
}
Questo fa parte di un'applicazione beta attualmente in esecuzione negli ambienti di test e di produzione (!), ma verrà aggiornata regolarmente a causa di correzioni di bug non correlate con le operazioni del database. Gli aggiornamenti vengono semplicemente eseguiti tramite la disinstallazione e la reinstallazione.
Ora ho un nuovo requisito per una situazione angolare molto specifica che richiederà una nuova colonna "col3" da aggiungere alla tabella, e dovrò inserire, selezionare e aggiornare i valori anche in quella colonna. Il problema è che non voglio rompere la compatibilità con i database esistenti in cui il software è già in esecuzione.
Stavo pensando di codificare una terza classe che implementa l'interfaccia HitTheDataBase, una classe helper per verificare se "col3" esiste e fare qualcosa del tipo:
hitTheDataBase hitMe = !helperclass.col3Exists() ? new hitSqlServer() : new hitSqlServerWithCol3();
È un buon approccio? Mi sembra buono, tranne perché dovrò modificare il codice nelle classi che usano quelle che "colpiscono il database". Inoltre dovrò controllare costantemente se esiste il valore di col3 per mostrarlo nella GUI e lasciare che l'utente lo modifichi.