【Java】for(int i = 0; i < hoge.size(); i++)を卒業しよう!〜For文、拡張For文、Iterator〜
mokabuu
mokabuu.com
Object思考を大切にするJavaの基本とも言えるのがこのDTOです。
DAOで拾って来た値をまとめておけるのがこのDTOです。特に大規模なアプリを作る際に活躍します。
public class BandInfoDao {
public List<BandInfoDto> getBandInfo(Connection con, String userId){
List<BandInfoDto> bandInfo = new ArrayList<BandInfoDto>();
/*
* TODO
* データベースに接続してselect Bandname, BandBirthDay, BandType from...
* とかでバンドの情報をとってきてListにaddしていく。
*
* (ex)
* BandInfoDto tmp = new BandInfoDto(rs.getString(1), rs.getInt(2), rs.getInt(3));
* bandInfo.add(tmp);
*/
return bandInfo;
}
}
public class BandInfoDto {
private String bandname;
private int bandCreateYear;
private int bandType;
public BandInfoDto(String bandname, int bandCreateYear, int bandType) {
this.bandname = bandname;
this.bandCreateYear = bandCreateYear;
this.bandType = bandType;
}
public String getBandname() {
return bandname;
}
public int getBandCreateYear() {
return bandCreateYear;
}
public int getBandType() {
return bandType;
}
@Override
public String toString() {
return "BandInfoDto [bandname=" + bandname + ", bandCreateYear=" + bandCreateYear + ", bandType=" + bandType + "]";
}
}
public class service {
private final static int BOYS = 1;
private final static int GIRLS = 2;
public String CheckBandType(BandInfoDto bandInfo){
int bandType = bandInfo.getBandType();
switch(bandType){
case BOYS:
return "やろばん";
case GIRLS:
return "ギャルバン";
default:
return "混声";
}
}
}
こうしておくことでバンド管理表に項目が増えた際には、BandInfoDtoをいじくるだけで簡単に項目を増やせますね!
後はDaoでしっかりと増えた分の値をセットするのと、セットした値を呼び出したい場所でgetをするだけです。
上記のサンプルプログラムですと、Daoにユーザー名とコネクションが渡されて、そこで読み取ったバンド情報がBandInfoDtoとして扱われます。
なのでBandInfoDtoさえあれば、BandInfoDto.getBandname()と書けば簡単にバンド名を取得できてしまうわけなのです。
たまにいるんです。
大規模なweb開発を共同で行っている際に引数を全てベタ書きにする人。
いったい何個メソッドを直させる気なんだ!
影響範囲のことは考えたのだろうか?!
保守性と言う言葉を1000回ぐらい紙に書いて欲しいものです。
同じデータベースからとって来た1連の情報であれば
DTOを作成してDTOに値を持たせて管理するようにしましょう。
以上。
DTOの無いデータベースに変更を加える開発チケットを被弾し、48時間ぐらい連続でリファクタリングに追われた私が通りました。