14
EWD 3 トトトトトト トトト #26 Global トトトトトト JavaScript トトトトト (g) トトトトトトトトトトト M/Gateway Developments Ltd. Rob Tweed ト : トトトトトトトトトトトトト ト トト GT.M トトト : トト ト ※ トトトトトトトト Cache’ トトトトトトト

EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化 - (g) イベント駆動の索引管理

Embed Size (px)

Citation preview

Page 1: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化 - (g) イベント駆動の索引管理

EWD 3トレーニング・コース  #26

Global ストレージの JavaScript 用の抽象化

(g) イベント駆動の索引管理

M/Gateway Developments Ltd.Rob Tweed

訳 : 日本ダイナシステム株式会社 嶋 芳成

GT.M 版編集 : 澤田 潔

※ 本稿オリジナルは Cache’ 向けとして編纂

Page 2: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化 - (g) イベント駆動の索引管理

2

ドキュメント保存の索引管理

• ドキュメントのノードがひとつ生成され、変更され、削除されるたびに、それに対応する索引のドキュメント・ノードを維持したいと考えるでしょう• これをモジュラー化し、自動的に呼び出すに

はどのようにしたらよいでしょうか?

2016/9/21 EWD 3 トレーニング・コース #26

Page 3: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化 - (g) イベント駆動の索引管理

3

ドキュメント保存の索引管理

• ドキュメントのノードがひとつ生成され、変更され、削除されるたびに、それに対応する索引のドキュメント・ノードを維持したいと考えるでしょう• これをモジュラー化し、自動的に呼び出すに

はどのようにしたらよいでしょうか? イベントです

2016/9/21 EWD 3 トレーニング・コース #26

Page 4: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化 - (g) イベント駆動の索引管理

4

ドキュメント保存のイベント

• 次のものが、イベントを自動的に発行します• value プロパティ ( 値をセット/変更するための

利用時 )• setDocument() メソッド ( 各ノードが生成され

たとき )• increment() メソッド• delete() メソッド

• これらを利用して、索引を管理するハンドラーを書くことができます

2016/9/21 EWD 3 トレーニング・コース #26

Page 5: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化 - (g) イベント駆動の索引管理

5

ドキュメント保存のイベント

• beforeSet• afterSet• beforeDelete• afterDelete

• 多分、これらのうち  after* というイベントをよく使うことになります

2016/9/21 EWD 3 トレーニング・コース #26

Page 6: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化 - (g) イベント駆動の索引管理

6

ドキュメント保存のイベントの処理• this.documentStore.on(eventName, function(obj) {...});

•例えば :this.documentStore.on('afterSet', function(nodeObj) { //  変更されたノードについて何かをする}

2016/9/21 EWD 3 トレーニング・コース #26

Page 7: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化 - (g) イベント駆動の索引管理

7

ドキュメント保存のイベントの処理• this.documentStore.on(eventName, function(obj) {...});

•例えば :this.documentStore.on('afterSet', function(nodeObj) { //  変更されたノードについて何かをする}

2016/9/21 EWD 3 トレーニング・コース #26

どのノードが変更されたかを教え、( もしあれば ) 以前に持っていた値、今持っている新しい値を教えます

Page 8: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化 - (g) イベント駆動の索引管理

8

ドキュメント保存のイベントの処理• ノード・オブジェクトの afterSet の例

{ "documentName":"CacheTempEWDSession", "path":["session","72","foo":, "before": { "value":"bar", "exists":true }, "value":"bar" }

2016/9/21 EWD 3 トレーニング・コース #26

Page 9: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化 - (g) イベント駆動の索引管理

9

ドキュメント保存のイベントの処理

{ "documentName":"CacheTempEWDSession", "path":["session","72","foo":, "before": { "value":"bar", "exists":true }, "value":"bar" }

2016/9/21 EWD 3 トレーニング・コース #26

インデックスを生成・変更する必要があるかもしれない DocumentNode を教えています

Page 10: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化 - (g) イベント駆動の索引管理

10

ドキュメント保存のイベントの処理

{ "documentName":"CacheTempEWDSession", "path":["session","72","foo":, "before": { "value":"bar", "exists":true }, "value":"bar" }

2016/9/21 EWD 3 トレーニング・コース #26

その DocumentNode に afterSet イベントが発行される以前に内容があればその内容

Page 11: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化 - (g) イベント駆動の索引管理

11

ドキュメント保存のイベントの処理

{ "documentName":"CacheTempEWDSession", "path":["session","72","foo":, "before": { "value":"bar", "exists":true }, "value":"bar" }

2016/9/21 EWD 3 トレーニング・コース #26

afterSet イベントの結果、その DocumentNode の新しい値を教えます

Page 12: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化 - (g) イベント駆動の索引管理

12

どこでドキュメント保存のイベントを処理するか?

• アプリケーション特有のバックエンドのハンドラー・モジュール• そのオプションの init() 関数

• もしそのモジュール内で定義するなら、この関数はそのモジュールがワーカー・プロセスにより最初に読み込まれたときに呼び出されます

• この関数内に必要なハンドラーを定義することができます

• そのアプリケーション・モジュール内で、索引を作りたいドキュメントの名前をフィルタ ( 選択 ) することができます

2016/9/21 EWD 3 トレーニング・コース #26

Page 13: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化 - (g) イベント駆動の索引管理

13

ドキュメント保存のイベントを処理する• 例えば、 ~/ewd3/node_modules/demo1.js では :

module.exports = { init: function() { this.documentStore.on('afterSet', function(docNode) { console.log('*** afterSet event triggered by ' + JSON.stringify(docNode)); }); }, handlers: { testButton: function(messageObj, session, send, finished) { session.data.$('foo').value = 'bar'; send({ type: 'intermediate', foo: 'bar', date: new Date().toString() }), finished({ ok: 'testButton message was processed successfully!' }); } }; }

2016/9/21 EWD 3 トレーニング・コース #26

Page 14: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化 - (g) イベント駆動の索引管理

14

ドキュメント保存のイベントを処理する• 例えば、 ~/ewd3/node_modules/demo1.js では :

module.exports = { init: function() { this.documentStore.on('afterSet', function(docNode) { if (docNode.documentName === 'myDoc') { // このドキュメント・ノードの以前の値を削除 // 新しい索引ノードを生成する // -- 索引のドキュメント・ノードそのものに対しても、さらにイベントを呼び出す // ことを覚えておいてください } }); }, handlers: { // その他 ... }; }

2016/9/21 EWD 3 トレーニング・コース #26