Este é o meu cenário, tenho esta interface:
public interface hitTheDataBase
{
public void insertMe(String [] values);
public void modifyMe(String [] values);
public DataTable selectMe();
}
E eu tenho essas duas classes que implementam a interface:
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
}
}
Isso faz parte de um aplicativo beta realmente em execução em ambientes de teste e produção (!), Mas será atualizado regularmente devido a correções de bugs não relacionadas às operações do banco de dados. As atualizações são feitas simplesmente através da desinstalação e reinstalação.
Agora, eu tenho um novo requisito para uma situação de canto muito específica que precisará que uma nova coluna "col3" seja adicionada à tabela e terei que inserir, selecionar e atualizar valores nessa coluna também. O problema é que não quero interromper a compatibilidade com os bancos de dados existentes em que o software já está sendo executado.
Eu estava pensando em codificar uma terceira classe que implementa a interface HitTheDataBase, uma classe auxiliar para verificar se "col3" existe e criar algo como:
hitTheDataBase hitMe = !helperclass.col3Exists() ? new hitSqlServer() : new hitSqlServerWithCol3();
Será esta uma boa abordagem? Parece bom para mim, exceto porque precisarei modificar o código nas classes que usam aquelas que "atingem o banco de dados". Também terei que verificar constantemente se o valor de col3 existe para mostrá-lo na GUI e permitir que o usuário o modifique.