DCI中場景的另一種實現和思考

liontseng發表於2011-05-09

下面的解決方案,要比 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修改過]

相關文章