Đây là kịch bản của tôi, tôi có giao diện này:
public interface hitTheDataBase
{
public void insertMe(String [] values);
public void modifyMe(String [] values);
public DataTable selectMe();
}
Và tôi có hai lớp này thực hiện giao diện:
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
}
}
Đây là một phần của ứng dụng beta thực sự chạy trong môi trường thử nghiệm và trong sản xuất (!), Nhưng nó sẽ được cập nhật thường xuyên vì sửa lỗi không liên quan đến hoạt động của cơ sở dữ liệu. Các bản cập nhật được thực hiện đơn giản thông qua gỡ cài đặt và cài đặt lại.
Bây giờ, tôi có một yêu cầu mới cho một tình huống góc rất cụ thể sẽ cần thêm một cột "col3" mới vào bảng và tôi cũng sẽ phải chèn, chọn và cập nhật các giá trị trong cột đó. Vấn đề là tôi không muốn phá vỡ tính tương thích ngược với các cơ sở dữ liệu hiện có nơi phần mềm đang chạy.
Tôi đã suy nghĩ về việc mã hóa một lớp thứ ba thực hiện giao diện HitTheDataBase, một lớp trợ giúp để kiểm tra xem "col3" có tồn tại hay không và tạo ra một cái gì đó như:
hitTheDataBase hitMe = !helperclass.col3Exists() ? new hitSqlServer() : new hitSqlServerWithCol3();
Đây có phải là một cách tiếp cận tốt? Nó có vẻ tốt với tôi, ngoại trừ vì tôi sẽ cần sửa đổi mã trong các lớp sử dụng lớp "đánh vào cơ sở dữ liệu". Ngoài ra, tôi sẽ phải liên tục kiểm tra xem giá trị của col3 có tồn tại để hiển thị nó trong GUI hay không và cho phép người dùng sửa đổi nó.