用于投射Object table

时间:2017-12-19 13:23:48

标签: java design-patterns

我的项目有问题。我想知道这种情况是否有设计模式:

我正在从数据库中检索一行具有不同数据类型的对象

Object[] userInformationsRow = getUserInformationsFromDataBase();
int idColumn = 0;
int nameColumn = 1;
int birthDateColumn = 2;
// 
Integer idUser = (Integer)userInformationsRow[idColumn];
String nameUser = (String)userInformationsRow[nameColumn];
Date birthDateUser = (Date)userInformationsRow[birthDateColumn];

还有另一种方法来开发这种代码,在我看来,代码很长很难以及将来很难改变。

2 个答案:

答案 0 :(得分:1)

你可以从getUserInformationsFromDataBase()返回一个类,这很常见。如果您确实需要一个名称,那么搜索 DTO DAO (或存储库

UserInfos user = getUserInformationsFromDataBase();
user.getId();
user.getName();
user.getBirthDate();

如果您无法控制getUserInformationsFromDataBase(),则可以隐藏UserInfos后面的这个混乱,这是一种适配器

class UserInfos {
    private static final int ID = 0;
    private static final int NAME = 1;

    private final Object[] datas;
    public UserInfos(Object[] datas) {
        this.datas = datas; // This is NOT a good idea, search for array defensive copy 
    }      

    public Integer getId() {
        return (Integer) datas[ID];
    }

    public Integer getName() {
        return (String) datas[NAME];
    }
}

答案 1 :(得分:0)

我会做这样的事情:

int ix = 0;
Integer idUser = (Integer)userInformationsRow[ix++];
String nameUser = (String)userInformationsRow[ix++];
Date birthDateUser = (Date)userInformationsRow[ix++];

但是考虑将UserInformation类与您需要的字段一起使用,并以某种方式将其映射到您的数据库。