首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据-上下文-交互(DCI)和javascript中的事件编程

数据-上下文-交互(DCI)和javascript中的事件编程
EN

Stack Overflow用户
提问于 2012-10-08 22:57:54
回答 1查看 2.5K关注 0票数 4

我最近看了Trygve Reenskaug关于DCI的以下演示:https://vimeo.com/43536416它有点让我震惊。嗯,在代码中看到软件不同组件之间的交互是一个有吸引力的想法。

我试图在javascript中找到DCI的例子,但没有成功。然后我开始想。DCI模式不是与evented编程模式相反吗?

事件编程在javascript中很流行,我猜是因为它允许解耦,也因为经典的继承概念不是js原生的。我想我理解事件编程的好处,但我也注意到,当需要遵循事件消息时,调试可能非常困难。

说这两个概念是对立的,对吗?还是我搞错了?有没有一些我遗漏的js中的DCI的示例实现?为了理解这个概念,我应该看些什么?

EN

Stack Overflow用户

回答已采纳

发布于 2012-10-09 18:39:06

首先,事件编程或继承是DCI的正交性。您可以在不使用继承和使用事件编程(或不使用)的情况下进行DCI。

JavaScript被认为是进行数据集成的最好的语言之一。大多数语言在严格遵循DCI时都存在一些问题。在JavaScript中,如果有终结器,这些问题就可以解决,但缺乏终结器意味着你必须“处置”自己,这意味着一些无关紧要的代码。

我已经用JavaScript写了一个例子,我将把它放在http://fullOO.info上,在那里你可以找到Trygve,Jim和我和其他一些人一起创建的例子。

fullOO.info也是一个答案,你可以去哪里更多地了解DCI,或者你可以加入一个关于DCI的谷歌小组来讨论对象组成。

我用JS编写的示例是规范的DCI示例转账,有趣的部分(即除了样板/库代码之外的所有内容)如下所示:

代码语言:javascript
复制
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();

其余内容可在http://jsfiddle.net/K543c/17/上查看

票数 5
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12784276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档