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

という名前で最近はやっている実装スタイルがあるらしい事を 今日知った。

名付け親は、ファウラーさん。
Martin Fowler's Bliki in Japanese - 流れるようなインターフェース

で、どんな実装かっていうのは上のリンクを見てもらうとして、 つまりDSLを実現しようとしているような感じ。

昔、まだオブジェクト指向とJavaを知って 興奮しながらコーディングしてた時に 同じような発想をした事がある。

実際にコードを書き始めたが、その時は挫折した。
なぜかというと、設計が難しい。 システム内のいろんな局面でそれをやろうとすると、 クラス(インタフェース)の数が膨大になる。

この実装のポイントは、
ある目的を達成する為の手続きの為に、 インターフェースを細かく設計し、 それぞれのメソッドをうまく融合させて、 1つの事が実現する。
という事だと思う。

オブジェクト指向では、クラス中心に システムを設計していき、クラスの役割を、 「1つの事を上手に行う」という発想で 設計していく。これはクラス中心の発想。

流れるインタフェーススタイルはその中の メソッドにフューチャーしていて、
「1つの事を上手に行う為に、 次の仕事の案内を戻り値のインタフェースによって伝えながら、 対話的に行う。」
という事になる。 さらに、案内は選択肢が多くても意味がない。

そう対話的なのです。 つまり、完結しないメソッドを実装する事になります。

Statement st = 
 generator.select("id, hoge, mage")
          .from("orders")
          .where("xx=hoge");
みたいな感じかな。

IDEでエラーになるから、楽だよ。 的な発言もあるけど、やってみればわかると思うけど、 かなり設計が難しい。 失敗すると間違いなくカオスになるから、 むやみにやらない事も大事だと思った。

仮に、近い将来このスタイルが流行ったとしても、 開発プロジェクトとしてはあまり幸せじゃない 結果をもたらす気がするなぁ。

しかし、これをどこかで、実装したくてウズウズする自分もいる。 静的言語でも、DSL行けるんじゃねぇか。 今ならできるかもみたいな。。