1. はじめに - dojo.dataとは
Dojoが備えるデータAPIであるdojo.dataはデータの入出力を抽象化し、統一された操作を提供する一連のAPIです。これはSQLコマンドにたとえることができます。SQLコマンドをひとたび覚えれば、実際に背後で動作しているデータベース(DBMS) が何であるか(DB2やOracle, MySQLやPostgreSQLなど)を気にすることなく、基本的には同じ操作でデータをやり取りできますね。同様にdojo.dataのAPIを使えば、実際のデータをどこに・どのように格納しているかは気にせずに、開発者はデータのやり取りをできるようになります。
dojo.dataではデータを入出力する機能を持つオブジェクトをデータストアと呼びます(または、省略してストアと呼ぶこともあります。ソース中に現れるコメント、変数名などには短くstoreと記述してあることが多いです)。dojo.dataには一番基本的なデータストアの実装として、ItemFileReadStoreおよびItemFileWriteStoreが付属しています。
dojo.dataの実装は以下のようにdojo.dataパッケージ、およびdojox.dataパッケージのファイルから構成されています。
- dojo/data/api/* --- データストアが実装すべきAPIの定義
- dojo/data/util/* --- データストアを実装するときに使える便利なメソッド(simpleFetch)など
- dojo/data/* --- 基本的なデータストアの実装 (ItemFileReadStore, ItemFileWriteStore)
- dojox/data/* --- さまざまなデータソースを利用するデータストアの実装(XmlStore, CSVStore, FlickrStore, WikipediaStoreなど)。実験的なものも多く含みます
サンプルコードの実行方法は第1回記事導入部の説明をご覧ください。
連載の第2回である今回は、dojo.dataの基本的な使い方と実用例について解説します。
2. dojo.dataが定義するインターフェース
dojo.data.apiではデータストアが実装すべきAPIを定義しています。次のインターフェースが定義されています。
- dojo.data.api.Read --- データストアからデータを読み出すメソッドを定義しています。すべてのデータストアが実装します。
- dojo.data.api.Write --- データストアに新規データを作成する、または既存のデータを削除・変更するなど、データを変更するメソッドを定義します。データストアがデータ更新機能を持つとき実装します。
- dojo.data.api.Identity --- データストアに格納されたデータを識別するメソッドを定義します。ユニークIDによってデータを区別する必要があるとき実装します。
- dojo.data.api.Notification --- データストアに格納されたデータの更新イベントを定義します。データが更新されたとき通知する機能が必要なとき実装します。
ItemFileReadStore.jsのソースを読んでみると、ItemFileReadStoreの実装ではdojo.declare()による継承はされておらず、dojo.data.api.Readへの参照がないことに気がつきます。つまりdojo.data.api下のファイルはインターフェースを定義しているだけで、継承して使う必要はありません。
オブジェクトが定義と同じ名前・役割のメソッドを実装することでデータストアとしてふるまうことができます(これはダック・タイピングと呼ばれる手法です)。