ひがやすを技術ブログ

電通国際情報サービスのプログラマ

JdbcManagerをどこにおくのか

可読性は高いような気がするけど、テストとかどうなんだろう?
daoはdaoでがっちり定義してたほうがなんか作りやすそうな気がしなくもないんだけど、使ってみたらわかるのかな?
そうしようとするとdaoの中にjdbcManagerがあるコードを書くのか?
daoをインタフェースで定義、ってのが分かりやすくて好きだったんだけど、これだと昔の2wayとかどうなるんだろう?

たぶん、どこからJdbcManagerを呼び出すのかが、疑問に思っているところなのかなと思います。
基本は、ユースケースに対応したサービスクラスからJdbcManagerを直接呼び出します。ポイントは、JdbcManagerを呼び出している部分は、一つのメソッドとして独立させることです。


public class EmployeeService {
public JdbcManager jdbcManager;

public List<Employee> selectAll() {
return jdbcManager.from(Employee.class)
.join("department").getResultList();
}
...
}

サービスクラスのメソッドがDaoのかわりって感じ。テストしたいときは、Daoのかわりのメソッドをオーバーライドして適当な値を返せばOK。
2Wayもありますよ。

public class EmployeeService {
private static final String SELECT_ALL =
"examples.sql.SelectAll";

public JdbcManager jdbcManager;

public List<EmployeeDto> selectAll() {
return jdbcManager.selectBySqlFile(EmployeeDto.class, SELECT_ALL)
.getResultList();
}
...
}

SelectAll.sqlの中身はこれまでのS2Daoと同じです。
S2Daoと同じようなインターフェースを用意することも考えていますが、この辺は最初から用意するのではなく、要望が多ければ対応したいと思っています。