ewd 3トレーニングコース#26 globalストレージのjavascript用抽象化-(g)...
TRANSCRIPT
![Page 1: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化-(g) イベント駆動の索引管理](https://reader035.vdocuments.pub/reader035/viewer/2022080202/58f192101a28ab94768b45dd/html5/thumbnails/1.jpg)
EWD 3トレーニング・コース #26
Global ストレージの JavaScript 用の抽象化
-(g) イベント駆動の索引管理
M/Gateway Developments Ltd.Rob Tweed
訳 : 日本ダイナシステム株式会社 嶋 芳成
![Page 2: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化-(g) イベント駆動の索引管理](https://reader035.vdocuments.pub/reader035/viewer/2022080202/58f192101a28ab94768b45dd/html5/thumbnails/2.jpg)
2
ドキュメント保存の索引管理
• ドキュメントのノードがひとつ生成され、変更され、削除されるたびに、それに対応する索引のドキュメント・ノードを維持したいと考えるでしょう• これをモジュラー化し、自動的に呼び出すに
はどのようにしたらよいでしょうか?
2016/9/21 EWD 3 トレーニング・コース #26
![Page 3: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化-(g) イベント駆動の索引管理](https://reader035.vdocuments.pub/reader035/viewer/2022080202/58f192101a28ab94768b45dd/html5/thumbnails/3.jpg)
3
ドキュメント保存の索引管理
• ドキュメントのノードがひとつ生成され、変更され、削除されるたびに、それに対応する索引のドキュメント・ノードを維持したいと考えるでしょう• これをモジュラー化し、自動的に呼び出すに
はどのようにしたらよいでしょうか? イベントです
2016/9/21 EWD 3 トレーニング・コース #26
![Page 4: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化-(g) イベント駆動の索引管理](https://reader035.vdocuments.pub/reader035/viewer/2022080202/58f192101a28ab94768b45dd/html5/thumbnails/4.jpg)
4
ドキュメント保存のイベント
• 次のものが、イベントを自動的に発行します• value プロパティ ( 値をセット/変更するための
利用時 )• setDocument() メソッド ( 各ノードが生成され
たとき )• increment() メソッド• delete() メソッド
• これらを利用して、索引を管理するハンドラーを書くことができます
2016/9/21 EWD 3 トレーニング・コース #26
![Page 5: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化-(g) イベント駆動の索引管理](https://reader035.vdocuments.pub/reader035/viewer/2022080202/58f192101a28ab94768b45dd/html5/thumbnails/5.jpg)
5
ドキュメント保存のイベント
• beforeSet• afterSet• beforeDelete• afterDelete
• 多分、これらのうち after* というイベントをよく使うことになります
2016/9/21 EWD 3 トレーニング・コース #26
![Page 6: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化-(g) イベント駆動の索引管理](https://reader035.vdocuments.pub/reader035/viewer/2022080202/58f192101a28ab94768b45dd/html5/thumbnails/6.jpg)
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) イベント駆動の索引管理](https://reader035.vdocuments.pub/reader035/viewer/2022080202/58f192101a28ab94768b45dd/html5/thumbnails/7.jpg)
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) イベント駆動の索引管理](https://reader035.vdocuments.pub/reader035/viewer/2022080202/58f192101a28ab94768b45dd/html5/thumbnails/8.jpg)
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) イベント駆動の索引管理](https://reader035.vdocuments.pub/reader035/viewer/2022080202/58f192101a28ab94768b45dd/html5/thumbnails/9.jpg)
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) イベント駆動の索引管理](https://reader035.vdocuments.pub/reader035/viewer/2022080202/58f192101a28ab94768b45dd/html5/thumbnails/10.jpg)
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) イベント駆動の索引管理](https://reader035.vdocuments.pub/reader035/viewer/2022080202/58f192101a28ab94768b45dd/html5/thumbnails/11.jpg)
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) イベント駆動の索引管理](https://reader035.vdocuments.pub/reader035/viewer/2022080202/58f192101a28ab94768b45dd/html5/thumbnails/12.jpg)
12
どこでドキュメント保存のイベントを処理するか?
• アプリケーション特有のバックエンドのハンドラー・モジュール• そのオプションの init() 関数
• もしそのモジュール内で定義するなら、この関数はそのモジュールがワーカー・プロセスにより最初に読み込まれたときに呼び出されます
• この関数内に必要なハンドラーを定義することができます
• そのアプリケーション・モジュール内で、索引を作りたいドキュメントの名前をフィルタ ( 選択 ) することができます
2016/9/21 EWD 3 トレーニング・コース #26
![Page 13: EWD 3トレーニングコース#26 GlobalストレージのJavaScript用抽象化-(g) イベント駆動の索引管理](https://reader035.vdocuments.pub/reader035/viewer/2022080202/58f192101a28ab94768b45dd/html5/thumbnails/13.jpg)
13
ドキュメント保存のイベントを処理する• 例えば、 C:\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) イベント駆動の索引管理](https://reader035.vdocuments.pub/reader035/viewer/2022080202/58f192101a28ab94768b45dd/html5/thumbnails/14.jpg)
14
ドキュメント保存のイベントを処理する• 例えば、 C:\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