CACHÉプロキシオブジェクトを使ったアクセス方法
Cachéの重要な機能の1つとして、データベースの各項目をリレーショナルテーブルの行ではなくオブジェクトとして捉えてアクセスできる機能があります。Caché .NETアプリケーションでは、Cachéプロキシオブジェクトを使用してこの機能が実装されます。
このプロキシオブジェクトは、Cachéクラスディクショナリに定義されたクラスから生成された.NETクラスのインスタンスです。生成されたプロキシクラスは、完全に互換性のある.NETマネージドコードで記述されているため、プロジェクトのどの場所でも使用できます。
CACHÉプロキシオブジェクトとCACHÉ ADO Providerの相違点
CACHÉプロキシオブジェクトには、次の2つの特徴があり、それがCACHÉ ADO Providerと大きく異なる点です。
- Cachéオブジェクトバインディングウィザードによって、Cachéクラスに対応する .NETプロキシクラスを生成する必要があります。
- インスタンスにアクセスするには、
CacheCommand
とCacheDataReader
を使うのではなく、プロキシオブジェクトを使います。IDを指定して、特定のインスタンスをデータベースから取得する際には、SQL文は必要なく、OpenId()
クラスメソッドの呼び出しによって、接続と必要なインスタンスが定義されます。
インスタンスの各データ項目は、CacheReader
でアクセスするデータ列ではなく、ドット表記で指定して直接アクセスできるメソッドやプロパティとして扱われます。このことにより、多くの場合、ADO Providerを使うコードよりもはるかに記述や維持が簡単です。
CACHÉオブジェクトバインディングウィザードによるCACHÉプロキシオブジェクトの生成
Cachéオブジェクトバインディングウィザードは、コマンドラインからも実行可能ですが、アドインをVisual Studioの[外部ツール]メニューに追加して、Visual Studioから離れることなく利用が可能です。その手順は次のようになります(ここではVisual C# 2005 Express Editionの例)。
1. Visual Studioの[ツール]メニューから[外部ツール]を選択します。
2. このダイアログの[追加]をクリックし、次のように設定します。
- [タイトル]フィールド
- [コマンド]フィールド
3. [OK]をクリックして設定を完了させると、Visual Studioの[ツール]メニューに[Cache Object Binding Wizard]が追加されます。
4. このメニューからCache Object Binding Wizardを起動します。
ここで次の画面のように、接続するCachéサーバと生成する内容(ソースコードと対象言語)および出力先、使用するクラスを指定します。
[Generate]ボタンを押すと、Cachéプロキシオブジェクトが生成されます。これをプロジェクトに追加することで、Visual Studioで利用可能になります。
CACHÉプロキシオブジェクトの使い方
Cachéプロキシオブジェクトは、データベースのインスタンスに対して、標準的な操作のほとんどを実行できます。例えば、オブジェクトを開いて読み込むには、OpenId()
メソッドを使用し、IDを指定してインスタンスにアクセスします。OpenId()はスタティッククラスメソッドであり、次のようにインスタンス名ではなくタイプ名で指定します。オブジェクトをインスタンス化しておくと、標準ドット表記を使用してデータの読み書きが行えます。
Sample.Person person = Sample.Person.OpenId(CacheConnect, "1"); string Name = person.Name string ID = person.Id(); person.Home.City = "Smallville"; person.Home.State = "MN";
また、Cachéプロキシオブジェクトのコンストラクタは、CacheConnection
オブジェクトの情報を使用して、プロキシオブジェクトとCachéサーバ上の対応するオブジェクトとのリンクを作成します。
Sample.Person person = new Sample.Person(CacheConnect); person.Name = "Luthor, Lexus A."; person.SSN = "999-45-6789";
続いて、Save()
メソッドを使って、データベースに永続インスタンスを作成します。インスタンスを保存しておくと、Id()
メソッドにより、新たに生成されたID番号が取得できます。
CacheStatus sc = person.Save(); Display.WriteLine("Save status: " + sc.IsOK.ToString()); string ID = person.Id(); Display.WriteLine("Saved id: " + person.Id());
Close()
メソッドを使うと、プロキシオブジェクトは破棄せずに、データベースとプロキシオブジェクトとの接続を切断します。プロキシオブジェクトを破棄するにはDispose()
メソッドを使いますが、データベースにある永続インスタンスには影響しません。データベースからインスタンスを削除するためには、DeleteId()
メソッドを使います。次のようにExistsId()
メソッドを使うと、そのインスタンスが削除されたことを確認できます。
CacheStatus sc = Sample.Person.DeleteId(CacheConnect, ID); Display.WriteLine("Delete status: " + sc.IsOK.ToString()); Display.WriteLine("person " + ID + " exists: " + Sample.Person.ExistsId(CacheConnect, ID).ToString());
では、サンプルプログラムの実行画面を確認してみましょう。次の画面は、Save()
メソッドによる永続化と、そのインスタンスの削除を続けて実行した結果です。
まとめ
2回に分けてCachéを活用した.NETアプリケーション開発について紹介しましたが、CACHÉ ADO ProviderクラスもCACHÉプロキシオブジェクトも共に、本記事のスペースでは説明しきれないほどの機能を有しています。ぜひ、インターシステムズのドキュメント提供サイトで詳細を確認してください。
次回は、CachéによるWebアプリケーション構築のための環境である「Caché Server Page」について解説します。