我对DCI的解理

11-05-05 lcg635
大家,这两天看了与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); });

<p>

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

大家好,我是first player

大家好,我是second player

first player 加入了战斗

second player 加入了战斗

first player 攻击了 second player

战斗结果:first player 胜利了

              

5
banq
2011-05-05 11:55
很好,我认为要更加DCI,相比之前的:

http://www.jdon.com/jivejdon/thread/40951

Data: Player 四色原型的PPT

Context: FightingContext 四色原型的MI

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

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

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

没明白这位的意思。。。

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

一点点自己的看法而已,我个人认为场景的生成是离不开时间和地点,时间和地点可以说是场景的唯一标识。又或者说当场景中的交互,需要时间的时候,应该很自然地在场景中取得,而不是跳出领域,问系统拿。

[该贴被SpeedVan于2011-05-06 09:21修改过]

猜你喜欢
2Go 1 2 下一页