読者です 読者をやめる 読者になる 読者になる

VCLよく知らない人間があれこれ言うのは気が引けるのですが

http://d.hatena.ne.jp/lethevert/20050829/p5

このように書けば、既存の任意の木構造のデータオブジェクトに対して、Nodeインターフェースを適用するだけで、TreeViewコンポーネントを使って表示することができます。

それってそんなに嬉しいの?と思ったので。

Delphiの型システムを良く知らないので、変なこと言うかもしれませんが、Javaと同じだと仮定します。

GUIにデータを表示するために、オブジェクトにGUIのためのインタフェースを実装しておくことは、不自然な気がします。いや違うな。不自然とかじゃなくって、経験的にそれはやらないな、と思うわけですね。特に、DelphiとかVBとかC#とかの場合に限ると。

表示したいオブジェクトのクラスに特定のインタフェースを実装しておかなくてはいけないという状況は、おかしいと思うんですよ。AとBとCで表示するかもしれないから、それぞれに対応するIAとIBとICを実装しておこう、なんてばかげてると思うわけです。あるいはIAを実装しないオブジェクトを表示しようと思ったら、そこで行き詰るわけですし。

それよりは「Aで表示することになったらAに対応するValueObujectを作成する」ほうがましです。今あるオブジェクトからいちいちValueObjectに変換するプログラムを書かなくてはいけないというのは、確かにめんどくさいんですが。それはそういう設計思想であるという問題であり、欠点かもしれませんが、この欠点の解決方法は存在しないと思います。

あるいはDelphiではなくRubyだったら、GUIで表示するオブジェクトに特定のインタフェース(メソッド群)を要求することは問題ないと思います。Rubyでは既存のクラスに任意のメソッドを実装することができますから。Aで表示する際に必要なインタフェースIAは、必要になった時点で実装すれば良い。