【Java】頼むからDTOをしっかりと実装して欲しいお話


Data Transfer Object
Javaの基本とも言えるのがこのDTOです。
DAOで拾って来た値をまとめておけるのがこのDTOです。
特に大規模なWebアプリを作る際に活躍します。



保守が簡単

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時間ぐらい連続でリファクタリングに追われた私が通りました。


最後まで読んでいただきありがとうございます。もしこの記事を気に入って頂けたようであればシェアをお願い致します。非常に励みになります。


コメントを残す