有第三方应用程序,我的应用程序访问该数据库。它的数据库模式已经多次更改,因此,现在大约有四种不同的数据库模式(不同的列,相同实体的不同选择条件)。
例如,有一个实体“应用程序”。对于不同的模式,可以通过以下方式检索:
1)SELECT * FROM apps WHERE cell_number < 65535 AND page_number < 65535 AND top_number = 65535
2)SELECT * FROM menu_item WHERE cell_number > -1 AND page_number > -1 AND parent_id = -1 AND component_name IS NOT NULL
等等......
那么,支持同一应用程序的不同版本的多个数据库模式的设计模式(在Java中)会更加舒适吗?当然,它应该为未来的变化做好准备。
答案 0 :(得分:2)
这不是一件容易的事,因为很难将表结构映射到对象(现在经常使用ORM来执行此任务)。
从您的问题看来,将Application声明为抽象类或接口并提供不同的实现就足够了。
public abstract class Application(){
public abstract Application getAnApplication();
}
public ConcreteApplicationOne(){
public Application getAnApplication(){
//retrieve application data from database scheama 1 , build object and return it.
}
}
public ConcreteApplicationTwo(){
public Application getAnApplication(){
//retrieve application data from database scheama 2 , build object and return it.
}
}
使用某种工厂来构建给用户正确的具体应用类:
公共类工厂{ public Application getApplicationImplementation(){ if(cond1){ 返回new ConcreteApplicationOne(); } else { 返回new ConcreteApplicationTwo(); } } }
答案 1 :(得分:1)
我相信你的问题的解决方案是在你的应用程序中定义你的数据类,并使用像Hibernate这样的ORM在你的数据库中生成数据库表。您需要检查迁移功能。请查看以下有关此主题的文章:
将数据结构移动到主代码后,您将赢得以下内容: