我最近在Trygve Reenskaug看到了关于DCI的以下介绍: https://vimeo.com/43536416 这有点让我大吃一惊。嗯,在代码中看到软件的不同组件之间的交互是一个有吸引力的想法。
我试图在javascript中找到DCI的示例,但未成功。然后我开始疑惑。 DCI模式不是与规划编程模式相对立的吗?
Evented编程在javascript中很流行,我想因为它允许解耦,并且因为经典的继承概念不是js本机的。我想我理解了编程编程的好处,但我也注意到,当需要跟踪事件消息时,调试可能很难。
说两个概念都遭到反对是否正确?或者我弄错了?我错过了js中的DCI的一些示例实现吗?为了挖掘概念,我应该注意什么?
答案 0 :(得分:4)
首先,事件编程或继承与DCI正交。您可以在没有继承和事件编程的情况下(或不使用)进行DCI。
JavaScript在某种程度上是DCI中最好的语言之一。大多数语言在跟踪DCI时存在一些问题。在JavaScript中,如果有终结器可以解决问题,但缺少终结器意味着你必须“处置”你的自我意义一些noilerplate代码。
我在JavaScript中编写了一个示例,我将在http://fullOO.info上联机,您将在其中找到Trygve,Jim和我与其他人创建的示例。
fullOO.info也是您可以更熟悉DCI的答案,或者您可以加入对象组合谷歌小组讨论DCI。
我用JS编写的示例是规范的DCI示例汇款,有趣的部分(除了样板/库代码之外的所有内容)可以在下面看到:
var moneyTransferContext = function(sourcePlayer, destinationPlayer, amount) {
var source = {
withdraw: function() {
var text = "Withdraw: " + amount;
this.log.push(text);
this.balance -= amount;
console.log("Balance: " + this.balance);
}
},
destination = {
deposit: function() {
var text = "Deposit: " + amount;
this.log.push(text);
this.balance += amount;
console.log("Balance: " + this.balance);
}
};
source = assign(source).to(sourcePlayer);
destination = assign(destination).to(destinationPlayer);
return {
transfer: function() {
source.withdraw();
destination.deposit();
return this;
}
};
},
sourceAccount = {
log: [],
balance: 100
},
destinationAccount = {
log: [],
balance: 0
};
moneyTransfer(sourceAccount, destinationAccount, 25).transfer().unbind();
看到