DCI中场景的另一种实现和思考
下面的解决方案,要比 http://www.jdon.com/jivejdon/thread/41011
更好一些吧。
--------------------------------------------------------
我们不必回避某些实际的技术问题,而是应进一步把非领域代码和底层代码相分离,
而分离也不必绕太多弯。
server.get...可以理解为一个用例,而Context是一个场景。
但是我们有时候,场景内部不应该结合REQ和RES对象,这时候可
以用cxt.handle进行处理,比如显示什么的。
--------------------------------------------------------
server.get('/testcxt',function(req,res){
var Context = require('./Context');
var role = "lion";
var cxt = new Context(role);
/**
init 是在执行context场景之前调用的方法,
self参数是表示context自身。
例如,甚至可以把 req 添加到 cxt 中,但这样又不表示侵入cxt本身。
可以加入任意的东西。
cxt.init = function(self){
self.req = req;
}
*/
cxt.init = function(self){
console.log('init'+self);
// 做一些初始化的事情。
}
/**
handle 是当context执行之后调用的方法,
也就是业务完成后,处理的方法,
result是领域层完成业务后的结果,
handle内部可以进行一些后备处理,比如页面显示等。
*/
cxt.handle = function(result){
res.send(result); // 显示结果
// 当然不一定只处理显示
// 这里的优势是,res对象不会被嵌入到 Context 内部
// 而res可以被handle直接访问到,这是利用了Javascript的闭包实现的。
}
cxt.run();
});
[该贴被liontseng于2011-05-09 13:38修改过]