流暢なインターフェース流れるようなインターフェース
流暢なインターフェースという訳になってみたいなので、今後は、流れるようなインターフェースではなく、流暢なインターフェースという言い方に変えたいと思います。
流れるようなインターフェースにかわったようなので元に戻します。
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?FluentInterface
http://d.hatena.ne.jp/higayasuo/20071018#1192681950
ぶくまのコメントで、
とあります(うちの会社のドキュメントじゃん)が、これはいろんな人が思うことだと思うので、私の意見を書いておきます。
http://www.objectclub.jp/community/codingstandard/ このあたりのJava規約だとチェインさせるような書き方は避けるべき、となっている
まず、可読性が悪くなるという話は、昨日のエントリを参照していただければ、逆に可読性はあがるということが直ぐにわかっていただけると思います。ファウラーたんの文章にもありますが、読みやすさを第一に念頭において設計された「流暢なインターフェース」は可読性は高いのです。
同期化の話をすると、「
コマンド・問い合わせの分離のように、これまで良いとされていたことでも、より新しい使い方が出てこれば、変わっていく可能性があるということです。
追記:
昨日や今日のぶくまのコメントを見ると塗るぽったと気にわかりづらそうということを書いている方がいますが、そんなことはないですよ。だって戻り値は最後のメソッド以外はthisを返すだけだから。thisを返さない場合でも、「
クロスコミュニティカンファレンス
日本Javaユーザグループ主催で、クロスコミュニティカンファレンスが11/6に東京国際フォーラムで行われます。
http://www.java-users.jp/contents/events/ccc2007fall/
注目は、「Webアプリケーション開発の今後を占う」のセッション。Rails, Spring, Seasarのそれぞれのチームから20分ずつポジショントークをした後、1時間のパネルディスカッションを行います。担当はこんな感じ。
注目は、ヨシオリですよ。
Struts脳の恐怖とRails、 だったら Java でも良いじゃないか!!など、Java, Railsについて熱い思いを持っている彼が、どうしきるのか。彼の思いを聞いてみましょう。
高井さんもこんな感じでぶちかましてくれるでしょう。
暴言をたれながしてみる
是非、お越しください。
Seasarカンファレンスもお申し込みくださーい。
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と同じようなインターフェースを用意することも考えていますが、この辺は最初から用意するのではなく、要望が多ければ対応したいと思っています。