Caché オブジェクトとの統合
cache.node モジュールは、Node.js アプリケーションが Caché オブジェクトを直接統合できるようにするメソッドを提供します。(Caché クラス・ライブラリに定義されたクラスのインスタンス)
この章の例は、工夫されながら単純な Caché %PersistentOpens in a new tab クラスに基づいており、それらを以下に示します。
Class User.customer Extends %Persistent
{
Property number As %Integer;
Property name As %String;
ClassMethod MyClassMethod(x As %Integer) As %Integer
{
Quit x * 2
}
Method MyMethod(x As %Integer) As %Integer
{
Quit x * 3
}
}
NoSQL ベースのオブジェクト指向開発手法
ここまでに本書で示した例では、Caché データベースを、単なる NoSQL エンジンとして使用する方法を示しました。この章のコードでは、JavaScript で JSON 表記法と共に cache.node メソッドを使用して、よりオブジェクト指向な開発手法を作成する方法を示します。
var cachedb = require('cache');
var user = new cachedb.Cache();
user.open({
path:"/cache20102/mgr",
username: "_SYSTEM",
password: "SYS",
namespace: "USER"});
var customers = new Customers();
var customer = customers.getCustomer(1);
console.log("customer number 1 is " + customer.data);
customers.setCustomer(9, "Tom Smith");
user.close();
function Customers() {
this.global = "Customer";
this.subscripts = new Array();
this.getCustomer = function(id) {
this.subscripts[0] = id;
var person = user.get(this);
return person;
}
this.setCustomer = function(id, name) {
this.subscripts[0] = id;
this.data = name;
var person = user.set(this);
return;
}
}
クラス・メソッドの呼び出し: invoke_classmethod()
メソッドとは、クラスによって定義される実行可能な要素です。Caché は、インスタンス・メソッド (キーワード Method) とクラス・メソッド (キーワード ClassMethod) の 2 種類のメソッドをサポートしています。インスタンス・メソッドは、クラスの特定のインスタンスから呼び出され、通常はそのインスタンスに関連するアクションを実行します。クラス・メソッドとは、インスタンスへの参照なしに呼び出せるメソッドのことです。他の言語では、静的メソッドと呼ばれています。通常、メソッドは、インスタンス・メソッドを指します。クラス・メソッドを指す場合には、より特定されたフレーズのクラス・メソッドが使用されます。
同期:
var result = mydata.invoke_classmethod(class_method);
非同期:
mydata.invoke_classmethod(class_method, function(error, result){});
var result = mydata.invoke_classmethod(
{class: "User.customer",
method: "MyClassMethod",
arguments: [7]}
);
結果:
{
"ok": 1,
"class": "User.customer",
"method": "MyClassMethod",
"arguments": ["7"],
"result": "14"
}
新しい Caché オブジェクトの作成: create_instance()
同期:
var instance = mydata.create_instance(class);
非同期:
mydata.create_instance(class, function(error, instance){});
var instance = mydata.create_instance({class: "User.customer"});
インスタンス:
{
"ok": 1,
"class": "User.customer",
"method": "%New",
"oref": 1
}
既存の Caché オブジェクトのオープン: open_instance()
同期:
var instance = mydata.open_instance(class);
非同期:
mydata.open_instance(class, function(error, instance){});
var instance = mydata.open_instance({class: "User.customer", arguments: [1]});
インスタンス:
{
"ok": 1,
"class": "User.customer",
"method": "%OpenId",
"arguments": ["1"],
"oref": 1
}
プロパティ値の設定: set_property()
同期:
var result = mydata.set_property(instance, property_value);
非同期:
mydata.set_property(instance, property_value, function(error, result){});
var result = mydata.set_property(
instance,
{property: "number",
value: 100000}
);
結果:
{
"ok": 1,
"oref": 1,
"property": "number",
"value": 100000
}
var result = mydata.set_property(
instance,
{property: "name",
value: "Chris Munt"}
);
結果:
{
"ok": 1,
"oref": 1,
"property": "name",
"value": "Chris Munt"
}
プロパティ値の取得: get_property()
同期:
var result = mydata.get_property(instance, property);
非同期:
mydata.get_property(instance, property, function(error, result){});
var get_property = mydata.get_property(instance, {property: "name"});
get_property :
{
"ok": 1,
"oref": 1,
"property": "name",
"value": "Chris Munt"
}
インスタンス・メソッドの呼び出し: invoke_method()
同期:
result = mydata.invoke_method(instance, method);
非同期:
mydata.invoke_method(instance, method, function(error, result){});
var result = mydata.invoke_method(instance, {method: "MyMethod", arguments: [3]});
結果:
{
"ok": 1,
"oref": 1,
"method": "MyMethod",
"arguments": ["3"],
"result": "9"
}
Caché オブジェクトの保存: save_instance()
同期:
var result = mydata.save_instance(instance);
非同期:
mydata.save_instance(instance, function(error, result){});
var result = mydata.save_instance(instance);
結果:
{
"ok": 1,
"oref": 1
}
Caché オブジェクトのクローズ: close_instance()
同期:
var result = mydata.close_instance(instance);
非同期:
mydata.close_instance(instance, function(error, result){});
var result = mydata.close_instance(instance);
結果:
{
"ok": 1,
"oref": 1
}
まとめ
Caché オブジェクトに基づいて、オブジェクト指向の手法を採用します。
var new_customer = new customer();
new_customer.create();
new_customer.number = 100000;
new_customer.name = "Chris Munt";
new_customer.save();
new_customer.close();
function customer() {
this.class = "User.Customer";
this.instance = {};
this.number = 0;
this.name = "";
this.create = function() {
this.instance = user.create_instance({class: this.class});
return this.instance;
}
this.save = function() {
var set_number = user.set_property(this.instance,
{property: "number", value: this.number});
var set_name = user.set_property(this.instance,
{property: "name", value: this.name});
var save = user.save_instance(this.instance);
return save;
}
this.close = function() {
var close = user.close_instance(this.instance);
return close;
}
}