我对DCI的解理

大家,这两天看了与DCI相关的文章,写了这么个测试程序,请指正。


//ppt
function Player(name) {
this.name = name;
}

Player.prototype.sayHello = function() {
return '大家好,我是' + this.name;
}

//role
function Fighter(player) {
for (var i in player) {
this[i] = player[i];
}
}

Fighter.prototype.attack = function(fighter) {

console.log(this.name + ' 攻击了 ' + fighter.name);
return this.name + ' 胜利了';
}

//mi
function FightingContext(fighters) {

this.attacker = arguments[0];
this.defender = arguments[1];

console.log(this.attacker.sayHello());
console.log(this.defender.sayHello());
}

FightingContext.prototype.interation = function(callback) {

console.log(this.attacker.name + ' 加入了战斗');
console.log(this.defender.name + ' 加入了战斗');

var res = this.attacker.attack(this.defender);
callback(res);
};

//fighting

var p1 = new Player('first player');
var p2 = new Player('second player');

var cxt = new FightingContext(new Fighter(p1), new Fighter(p2));
cxt.interation(function(res) { console.log('战斗结果:' + res); });

在node.js下运行输出结果:

大家好,我是first player
大家好,我是second player
first player 加入了战斗
second player 加入了战斗
first player 攻击了 second player
战斗结果:first player 胜利了

很好,我认为要更加DCI,相比之前的:
http://www.jdon.com/jivejdon/thread/40951

Data: Player 四色原型的PPT

Context: FightingContext 四色原型的MI

数据实体Player在场景FightingContext扮演角色Fighter,实施了交互行为(代码中只记录交互结果,可以看成持久化保存数据库的一些细节动作)。

感觉很自然,个人认为ctx因为是时间与空间的组成,应该包含这两者的。尽管可能玩家并不关注,但整个领域的日志,或者说上帝,它仍然是知道的。其实在某种角度上看场景和事件是等价的,某事件的发生才会有某场景产生,他们是一一对应关系。

2011年05月06日 09:07 "@SpeedVan"的内容
感觉很自然,个人认为ctx因为是时间与空间的组成,应该包含这两者的 ...

没明白这位的意思。。。

2011年05月06日 09:15 "@achilleswar"的内容
没明白这位的意思。。。 ...

一点点自己的看法而已,我个人认为场景的生成是离不开时间和地点,时间和地点可以说是场景的唯一标识。又或者说当场景中的交互,需要时间的时候,应该很自然地在场景中取得,而不是跳出领域,问系统拿。
[该贴被SpeedVan于2011-05-06 09:21修改过]

请教,对象的持久化在场景中完成还是场景外完成,在哪里完成合理点呢?

论坛好像经常上不了,我在此反应一下。

2011年05月06日 12:00 "@achilleswar"的内容
对象的持久化在场景中完成还是场景外完成,在哪里完成合理点呢 ...

当然是场景啊,场景是业务,场景是老大,持久化只是一个干活马仔啊。


相关主题:另外一位道友使用Node.js和DCI构建了类似MVC框架的web服务器框架,真是大道至简啊:
DCI的WEB服务器

DCI场景的生命周期
[该贴被banq于2011-05-09 09:10修改过]

有意思。