Hatena::ブログ(Diary)

yvsu pron. yas このページをアンテナに追加 RSSフィード

2007-10-18

Seasar2入門セッションは元に戻します

Seasarカンファレンスで、Seasar2入門セッションを、いろんな方に喜んでいただけるようにSeasar2ロードマップと復活のStrutsセッションに変えるよというアナウンスをしたのですが、Seasar2の入門セッションはやはり必要だということで、元に戻すことになりました。

期待していた方ごめんなさい。でも、入門セッションのほうも面白いネタをいろいろしゃべるつもりなので、是非お越しください。

流れるようなインターフェースと脱CoC

今後はやるフレームワークは「流れるようなインターフェース」を持ったものになるんじゃないかなぁと思います。流れるようなインターフェースの説明は、ファウラーたんのFluentInterfaceを参照してください。

Seasar2の新O/R Mapper(以後S2JDBCと呼びます)もこの「流れるようなインターフェース」を実現しています。例えば、JdbcManagerを使った検索はこんな感じになります。

List<Employee> results = jdbcManager.from(Employee.class)
                             .join("department")
                             .where("name like ?", "S%")
                             .orderBy("name")
                             .getResultList();

一番の特徴は、可読性の高さですね。何をやっているのかが一目瞭然ではないでしょうか。

二つ目は、IDEと組み合わせることで、APIを覚えていなくても自然に使えることです。何か記述したかったら、コード補完によって使える単語(メソッド)が自動的に選択されます。これが脱CoCにつながってきます。CoCは事前に規約を知っていないとどうしようもありませんが、「流れるようなインターフェース」の場合は、IDE自動的にできることを教えてくれます。また、単語(メソッド)の間違いもIDE自動的に教えてくれます。

例えば、orderBy()を間違えてsort()と書けば、そんなメソッドないよとIDE(コンパイラ)が教えてくれます。細かいことを覚えておく必要がないのです。

CoCは、確かに書くコードは減りますが、覚えなければいけないことが増えます。一番の問題点は、間違えたときにどこが間違っていたのか見つけづらいことです。

それに対して「流れるようなインターフェース」は、可読性が高いのでメンテナンスがしやすく、覚えることも少なくてすみます。間違った場合でも、どこが間違っているのか一目瞭然です。小規模な開発だけでなく、大規模な開発にも十分に答えることができるのです。

dewadewa 2007/10/18 14:52 「.join(”department”)」が「.join(Department.class)」にしないで
あえてタイプセーフにしていない意図がとっても気になります。

higayasuohigayasuo 2007/10/18 15:04 ネストしたときは、どうせタイプセーフにはできないので、
それとあわすためです。
join(Department.class).join(”employee.address”)みたいになるとバランスが取れないから。

dewadewa 2007/10/18 15:57 なるほど。モヤモヤ感が晴れました。
ありがとうございます。

ともやともや 2007/10/18 21:41 はじめまして、突然のカキコミ申し訳ありません。。。

自分の周りでは、Seasar2とかSpringFrameworkを使おう!(←どちらかというと若手)という動きと、
やっぱなんだかんだでStrutsだわな〜(←どちらかというとマネージャ年齢)という動きが、
やっと同居できるようになってきたな〜、というのが実感です。
(いままでは圧倒的にStruts寄りだったんですが。。。)
ちょうど中間管理的な年齢である私は、
Seasar2とStrutsの連携とかに一番興味があったりします☆
もちろんブルーオーシャン戦略とかにも興味ありますが。。。

なかなかマネージャを説得しつつ、
新しいものを導入するというのは難しいですね。。。
そんなヒントを少しでも吸収できるような、
素敵なカンファレンスになることを心からお祈りしております。
カラダには十分気をつけてくださいね〜☆
あ、デモやるんですか??
デプサミ2007を拝見した自分としては、
デモにも注目してみたいと思います(笑)

では、失礼いたします☆

せとあずさせとあずさ 2007/10/20 00:48 これって極端な話

List<Employee> results = jdbcManager.from(Employee.class)
.join(”department”)
.orderBy(”name”)
.where(”name like ?”, ”S%”)
.getResultList();

みたいな書き方をしてもコンパイルが通れば動作するんでしょうか?
ソースを見た限りでは動作しそうですが...

higayasuohigayasuo 2007/10/20 08:58 動作しますね。
単語の順番は、書き手の意思に任せるということで良いと思います。