JdbcManagerをどこにおくのか
可読性は高いような気がするけど、テストとかどうなんだろう?
daoはdaoでがっちり定義してたほうがなんか作りやすそうな気がしなくもないんだけど、使ってみたらわかるのかな?
そうしようとするとdaoの中にjdbcManagerがあるコードを書くのか?
daoをインタフェースで定義、ってのが分かりやすくて好きだったんだけど、これだと昔の2wayとかどうなるんだろう?
たぶん、どこからJdbcManagerを呼び出すのかが、疑問に思っているところなのかなと思います。
基本は、ユースケースに対応したサービスクラスからJdbcManagerを直接呼び出します。ポイントは、JdbcManagerを呼び出している部分は、一つのメソッドとして独立させることです。
サービスクラスのメソッドがDaoのかわりって感じ。テストしたいときは、Daoのかわりのメソッドをオーバーライドして適当な値を返せばOK。
public class EmployeeService {
public JdbcManager jdbcManager;public List<Employee> selectAll() {
return jdbcManager.from(Employee.class)
.join("department").getResultList();
}
...
}
2Wayもありますよ。
SelectAll.sqlの中身はこれまでのS2Daoと同じです。
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();
}
...
}
S2Daoと同じようなインターフェースを用意することも考えていますが、この辺は最初から用意するのではなく、要望が多ければ対応したいと思っています。