Ini skenario saya, saya punya antarmuka ini:
public interface hitTheDataBase
{
public void insertMe(String [] values);
public void modifyMe(String [] values);
public DataTable selectMe();
}
Dan saya memiliki dua kelas ini yang mengimplementasikan antarmuka:
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
}
}
Ini adalah bagian dari aplikasi beta yang benar-benar berjalan dalam lingkungan pengujian dan produksi (!), Tetapi akan diperbarui secara teratur karena perbaikan bug yang tidak terkait dengan operasi basis data. Pembaruan hanya dilakukan melalui uninstall dan menginstal ulang.
Sekarang, saya memiliki persyaratan baru untuk situasi sudut yang sangat spesifik yang akan membutuhkan kolom "col3" baru ditambahkan ke tabel, dan saya harus memasukkan, memilih dan memperbarui nilai-nilai dalam kolom itu juga. Masalahnya adalah saya tidak ingin merusak kompatibilitas dengan database yang ada di mana perangkat lunak sudah berjalan.
Saya sedang berpikir tentang pengkodean kelas ketiga yang mengimplementasikan antarmuka HitTheDataBase, kelas pembantu untuk memeriksa apakah "col3" ada, dan membuat sesuatu seperti:
hitTheDataBase hitMe = !helperclass.col3Exists() ? new hitSqlServer() : new hitSqlServerWithCol3();
Apakah ini pendekatan yang baik? Kelihatannya bagus untuk saya, kecuali karena saya perlu memodifikasi kode di kelas yang menggunakan yang "tekan database". Saya juga harus terus memeriksa apakah nilai col3 ada untuk menunjukkannya di GUI dan membiarkan pengguna memodifikasinya.