2017-12-19 6 views
1

プロジェクトに問題があります。オブジェクトテーブルの行をキャストするためのデザインパターン

私は、さまざまな種類のデータをデータベースからオブジェクトの行を取得しています

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

使用JPA APIを介し好ましいHibernateのようなORM(オブジェクトリレーショナルマッピング)フレームワーク、:、これはアダプタの一種です。 –

+1

[データマッパー](https://martinfowler.com/eaaCatalog/dataMapper.html) –

答えて

0

私はこのようなものだろう:

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

をしかし、あなたが必要とする分野でUserInformationクラスを使用することを検討し、何らかの形であなたのデータベースにマップします。

1

getUserInformationsFromDataBase()からクラスを返すことができます。これはかなり一般的です。あなたが本当にその名を必要とする場合は、あなたがgetUserInformationsFromDataBase()のコントロールを持っていない場合、あなたはUserInfosの後ろにこの混乱を非表示にすることができますDTODAO(またはリポジトリ

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

を検索

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]; 
    } 
} 
関連する問題