ひがやすを技術ブログ

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

S2AbstractServiceは便利なJdbcManagerじゃないよ

シンプルな問い合わせは、メソッドにしない。
Serviceクラス使ってる意味なくね?
aaSerivce.selectById(aaId);
というように、ID指定で取得するような問い合わせは、selectById()メソッドを作らず、
aaService.select().id(aaId).getSingleResult();
って書くんだと。なんでも、メンテナンスコストが下がるとかで。逆だろ、上がるだろこれ。

「シンプルな問い合わせは、メソッドにしない」というのは、S2JDBCのコミッタの間では推奨されていません。コメントによると個人事業主のつぶやきさんのプロジェクトの規約のようですね。
Serviceを利用する場合、使うほうは、select().id(aaId).getSingleResult()のように流れるようなインターフェースを使うのではなくて、ServiceにselectById()を作り、それを利用するほうがお勧めです。
なぜかというと、EntityごとのServiceを使う意味は、あるEntityに関する知識をそこに集約するためだからです。使うほうは、メソッド名だけ知っていればよく、その中身を意識しないようにすることが重要です。
じゃないとServiceを作る意味がなくなります。


それを踏まえて、Seasar2の次のバージョンでは、select()、selectBySql()、selectBySqlFile()はprotectedにする予定です。
すでにselect()を直接使っているプロジェクトは、AbstractServiceでselect()をpublicに変えることで、対応できます。


後、SQLファイルを置く位置ですが、今は、src/main/resources/の下に対象となるEntityと同じ名前のディレクトリにおいている(例えば、Entityがtutorial.entity.EmployeeだとSQLファイルを置くディレクトリはtutorial/entity/Employee)のですが、Eclipseでワーニングが出るので、/META-INF/sql/tutorial.entity.Employee/におくように変更したいと思います。