Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

Caché オブジェクトとの統合

cache.node モジュールは、Node.js アプリケーションが Caché オブジェクトを直接統合できるようにするメソッドを提供します。(Caché クラス・ライブラリに定義されたクラスのインスタンス)

この章の例は、工夫されながら単純な Caché %PersistentOpens in a new tab クラスに基づいており、それらを以下に示します。

例:クラス User.customer
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){});
例 1 :
   var result = mydata.set_property(
      instance,
      {property: "number",
       value: 100000}
    );

結果:

   {
      "ok": 1,
      "oref": 1,
      "property": "number",
      "value": 100000
   }
例 2 :
   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;
   }
}
FeedbackOpens in a new tab