DCI中Context对象的新设计

我们下面的代码将在实际应用中与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修改过]