DCI中Context物件的新設計

liontseng發表於2011-05-07
我們下面的程式碼將在實際應用中與DCI架構融合。

1. 我們需要建立一個繼承自 Context 類的 MyContext自定義的場景。
程式碼如下:


var Context = require('./Context');
var util = require('util');
var MyContext = module.exports = function(/*這裡的構造引數可以加入所需Data物件*/){
Context.call(this);
}

util.inherits(MyContext,Context); // 繼承 Context

// 重寫interact互動方法
MyContext.prototype.interact = function(afterHandle){ // 結果處理 Function物件 , interact 不應該由使用者直接呼叫,而是 run() ---》 呼叫的。參看 cxt.on('after',function(result)......)
// (略)這裡是互動程式碼
// 把最終結果交給afterHandle
afterHandle(result);
}

// OK, 這個Context建立成功

2. 呼叫場景,用的是Nodejs伺服器來測試的,程式碼如下

var MyContext = require('./MyContext');

var express = require('express');
var app = express.createServer();
app.get('/',function(req,res){
var cxt = new MyContext();
cxt.on("init",function(self,next){
self.abc = "lion tseng";
next();
});
cxt.on('after',function(result){ // 結果處理
res.send(result);
});
cxt.run(); // 執行場景...>
});
app.listen(3000);

//////////////////////// localhost:3000 瀏覽結果是: ////////////////

hello world.lion tseng

注意: 當呼叫 cxt.run 時 這裡的呼叫順序是 init -> before -> 使用者自定義 interact 方法 -> after
self是 cxt自身 , next是進行下一步的的處理,比如 Init中呼叫的 next() 就是 呼叫了 before 所有的 listeners.



[該貼被liontseng於2011-05-07 15:19修改過]

相關文章