javascript中的数据上下文交互(DCI)和事件编程
我最近看到了Trygve Reenskagug关于DCI的以下演示: 这有点让我大吃一惊。嗯,在代码中看到软件不同组件之间的交互是一个很有吸引力的想法 我试图在javascript中找到DCI的示例,但没有成功。然后我开始怀疑。DCI模式不是与事件编程模式相反吗 事件编程在javascript中很流行,我想这是因为它允许解耦,而且经典的继承概念不是js固有的。我想我理解事件编程的好处,但我也注意到,当需要遵循事件消息时,调试可能非常困难javascript中的数据上下文交互(DCI)和事件编程,javascript,model-view-controller,design-patterns,dci,event-based-programming,Javascript,Model View Controller,Design Patterns,Dci,Event Based Programming,我最近看到了Trygve Reenskagug关于DCI的以下演示: 这有点让我大吃一惊。嗯,在代码中看到软件不同组件之间的交互是一个很有吸引力的想法 我试图在javascript中找到DCI的示例,但没有成功。然后我开始怀疑。DCI模式不是与事件编程模式相反吗 事件编程在javascript中很流行,我想这是因为它允许解耦,而且经典的继承概念不是js固有的。我想我理解事件编程的好处,但我也注意到,当需要遵循事件消息时,调试可能非常困难 说这两个概念是对立的,对吗?还是我弄错了?有没有我错过的j
说这两个概念是对立的,对吗?还是我弄错了?有没有我错过的js中DCI的一些示例实现?要挖掘这个概念,我应该看些什么?首先,事件编程或继承与DCI相关。您可以在没有继承和事件编程(或没有)的情况下执行DCI JavaScript在某种程度上是进行DCI的最佳语言之一。大多数语言在严格遵循DCI方面都存在一些问题。在JavaScript中,如果有终结器,问题是可以解决的,但是缺少终结器意味着您必须“处理”自己的代码,即一些noilerplate代码 我已经用JavaScript写了一个例子,我将把它放到网上,在那里你可以找到Trygve、Jim和我与其他人一起创建的例子 fullOO.info也是您可以去哪里更熟悉DCI的答案,或者您可以加入一个google小组讨论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();
其余的可以在上看到,非常感谢,非常有趣。我一回到家就会学习密码。但是你能详细说明dci和evented之间的区别吗?由一个组件发送并由另一个组件侦听的事件不是组件之间的交互吗?当我看电影的时候,我脑子里想着一些事情。如今,js webapps中的所有内容都使用事件。它们用于访问其他组件上的方法,而不是直接访问,以实现解耦,并防止应用程序在一个组件损坏时完全损坏。@olivvv事件只是在对象之间发送消息的另一种方式。DCI涉及在代码中捕获哪个对象向哪个对象发送哪个消息。您还可以将事件视为启动上下文的内容。因此,事件驱动与DCI是正交的,但我想你实际上指的是异步,这是一个非常不同的东西不,我不是指异步,而是指发布/订阅通信。例如,一个组件监视键盘和鼠标的活动,并广播其他组件的事件,让它们知道用户是否处于活动状态。可以有很多组件在侦听。上下文如何考虑这一点?@Olivvv根据定义,DCI中对象之间的所有通信都是在上下文中捕获的(每个通信对象网络对应一个上下文),因此您只需要拥有通信的角色。也就是说,它目前是DCI的边界区域。所以组件应该在上下文方法中处理事件吗?