JAVAの記事一覧

目次

趣旨

このページでは一般的に流れるインタフェースに対してなんか言われているが、自分の思うことをかいてみる

究の流れるインタフェース

下記のような記述で動作するインタフェースである。

[Windows]-[メモ帳]に("Hello")と書く。

何をしたいか、人間ならわかるはずである。

でも、どういうわけだか、コンピュータは理解してくれない。パーサのせいだろうか?

Java風に書いてみる。

WindowsXP.NotePad.write("Hello");

ライブラリがあれば、動くはずである。問題はそのようなインタフェースを持ったライブラリが無いのである。 APIを提供する側からすれば、エディターなんて別に NotePad?に限定しなくてもいいんじゃないかと思うことだろう。 その時点で上記のようなインタフェースの提供はありえなくなってしまうのだ。 WindowsXPでできるすべての一覧表がIDE上で得られないと、「NotePad?」が正しいのか、「nodtepad」が正しいのか、はたまた、「メモ帳」が正しいのかわからなくなってしまう。

人間ならば、何をするのかわかるのに、パソコンだと認識しなくなるのって、 なにがおかしいんだろうか?

という疑問がわきませんか?

流れるようなinterface(fluent interface)

流れるようなInterfaceって大まかにいうと下記の主張をしているといえる。

静的な型付き言語だと、流れるようなインタフェースをライブラリが用意してくれていると、バグの発生が少なくなる。なぜかというと普通よく見かけるプログラミングでは戻り値に変数String resultに値が帰ってくるだけだが、そのresultの使い方の選択肢は無限にあり、その選択肢にはバグの選択肢がたくさんふくまれているからなのだ。

ところが、流れるインタフェースでは正解となるインタフェースしか用意されていない。 結果を処理するクラスとメソッドを探す手間が不要で、間違いがない。だからバグが少ないのだ。

自分の意見

自分は昔から、流れるようなインタフェースでプログラムをつくってきた。流れるようなインタフェースを作る時の留意する点は下記のとおりである。

JavaAssist?は動的にクラスを作り、しかもバイトコードなので、実際のIDEを使ったコーディング時に、流れるインタフェースを使う用途には、向いていない。

提案目的

流れるインタフェースは、設計思想ごとにグループを持つと思われるが、 それだと、ほかの人のソースコードを転用する際に設計概念をあわせなくてはならないので、面倒だ。だから下記の提案をする。

問題は誰に向けての提案なのかということなのだが。気にしないでおこう。

提案内容

例はJMockのソースコード

mock.expects(once()).method("m").with( or(stringContains("hello"),
                                          stringContains("howdy")) );

Martin Fowler's Bliki

http://martinfowler.com/bliki/

日本語訳

http://capsctrl.que.jp/kdmsnr/wiki/bliki/

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS