Valueバインディング
昨日はWidgetバインディングについて書きましたが、Valueバインディングについても考えてみます。
多くのアプリケーションの場合、テキストフィールドに入力された文字列とか、コンボボックスの選択値、ツリーでの選択状態などを取得したいはずです。
従来は Control オブジェクトの getText() メソッドなどを使って取得していたわけですが、やはり String など直接扱える形で Action クラスへバインドして欲しいのです。
そんなわけで、以下のようなテキストフィールドを表すXMLが合った場合、
<control type="text" id="name" />
id属性の name で紐付けして、
private String name;
Action クラスにある同名のフィールドにバインドするような機能もサポートしたいと考えています。テキストフィールド以外はどのようにバインドするのか、もう少し詰めなくてはならないですが。
これで、大抵の場合 Action クラスは SWT を意識しなくてすむようになるでしょう。
ちょっと変わったことがしたくて、SWT の Widget を直接触りたい場合は、Widgetバインディングを使ってください、という使い分けです。
フレームワークの場合、
- 抽象化しすぎると使い方は簡単になるけど、痒いところに手が届かない
- 痒いところに手が届くようにすると、使い勝手が悪い
という相反する問題に対して、どううまくバランスを取るかが設計者のセンスではないかと思っています。
Seasar の Dicon定義方法(オートバインディングやオートレジスタ)とか、S2Daoの2way-SQLという考え方は、このあたりをうまくバランスとった結果なのだと思うのです。