EOKVCAbout

2007/03/30 (Fri) 22:07:46 JST

Key-Value Coding(キー・バリュー・コーディング、以下KVC)はオブジェクトにアクセスするための仕組みで、JavaのInterfaceとして用意されています。 仕組み自体は単純なものの、開発ツールとコードの間の糊付けのような役割を持っています。

KVCは文字列をキーとしてオブジェクト属性へアクセスするための仕組みです。 オブジェクト属性には valueForKey と takeValueForKey の2つのメソッドを使ってアクセスします。 KVCを実装したオブジェクトは、あたかも辞書オブジェクトのように属性値にアクセスすることができます。

KVCは次のクラス(とそのサブクラス)に実装されています。

パッケージクラス
com.webobjects.directtowebD2WContext
com.webobjects.appserverWOApplication, WOComponent, WOContext, WOCookie, ?WODirectAction, ?WODisplayGroup, WOHTTPConnection, WOMessage, WOSession, ?WOStatisticsStore
com.webobjects.appserver.xmlWOXMLDecoder
com.webobjects.eoapplicationEOController
com.webobjects.eocontrol?EOCustomObject
com.webobjects.foundationNSArray, NSDictionary
com.webobjects.webservices.support.xml?WOStringKeyMap

メリット

オブジェクト属性への動的で統一的なアクセス方法を提供する
属性値には「キー(属性名)」さえわかっていればアクセスできます。 クラスに応じたアクセス方法を考えずにすみますし、ユーザ入力から任意の属性にアクセスするのも簡単です。
オブジェクト属性へのアクセス方法を自動的に検索する
KVCは複数のアクセサメソッドとインスタンス変数を自動的に検索します。 属性にアクセスするのにメソッドの名前や有無などを気にかける必要がなく、アクセサメソッドを後から実装しても他のコードに影響しません。
オブジェクト間を論理的関係でたどることができる
キーパス(キーをピリオドでつなげたパス)を指定することで、オブジェクトの構造をたどって属性にアクセスすることができます (XPathやGroovyのオブジェクトナビゲーションに似ています)。 このときオブジェクト間が1対多の関係(参照先がNSArrayオブジェクト)である場合、平均値や最大値などの集合演算を実行することもできます。

Key-Value Codingが使われる場面

WOBuilder, EOModeler, ?RuleEditorなどの開発ツール
各種開発ツールでよく見られる "Key" はKVCのキーのことを指します。
バインディングの検索
エレメントのバインディング設定がキーパスになっています。
eoの値へのアクセス
eoのデータ行の各値にはKVCのメソッドでアクセスします。
EOQualifierでのフィルタリング
フィルタリング(EOQualifier.filter...)時、指定したキーが各オブジェクトに対して使われます。

Inverse Pages: WebObjects基礎研究室