Este es mi escenario, tengo esta interfaz:
public interface hitTheDataBase
{
public void insertMe(String [] values);
public void modifyMe(String [] values);
public DataTable selectMe();
}
Y tengo estas dos clases que implementan la interfaz:
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
}
}
Esto es parte de una aplicación beta que realmente se ejecuta en entornos de prueba y producción (!), Pero se actualizará regularmente debido a las correcciones de errores no relacionadas con las operaciones de la base de datos. Las actualizaciones se realizan simplemente mediante desinstalación y reinstalación.
Ahora, tengo un nuevo requisito para una situación de esquina muy específica que necesitará agregar una nueva columna "col3" a la tabla, y también tendré que insertar, seleccionar y actualizar valores en esa columna. El problema es que no quiero romper la compatibilidad con las bases de datos existentes donde el software ya se está ejecutando.
Estaba pensando en codificar una tercera clase que implementa la interfaz HitTheDataBase, una clase auxiliar para verificar si existe "col3", y hacer algo como:
hitTheDataBase hitMe = !helperclass.col3Exists() ? new hitSqlServer() : new hitSqlServerWithCol3();
¿Es este un buen enfoque? Me parece bien, excepto porque necesitaré modificar el código en las clases que usan los que "golpean la base de datos". También tendré que verificar constantemente si el valor de col3 existe para mostrarlo en la GUI y dejar que el usuario lo modifique.