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

标签 javascript model-view-controller design-patterns dci event-based-programming

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

我试图在 javascript 中找到 DCI 的示例,但没有成功。然后我开始怀疑。 DCI 模式不是与事件编程模式相对吗?

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

这两个概念是对立的吗?还是我弄错了?有没有我错过的 js 中 DCI 的一些示例实现?为了挖掘这个概念,我应该看什么?

最佳答案

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

JavaScript 在某些方面是执行 DCI 的最佳语言之一。大多数语言在严格遵循 DCI 方面都存在一些问题。在 JavaScript 中,如果有一个终结器,问题就可以解决,但是缺少终结器意味着你将不得不“处理”你的 self ,这意味着一些 noilerplate 代码。

我已经用 JavaScript 编写了一个示例,我将在 http://fullOO.info 上发布该示例您可以在其中找到 Trygve、Jim 和我与其他一些人一起创建的示例。

fullOO.info 也是您可以去哪里更熟悉 DCI 的答案,或者您可以加入 object-composition 谷歌群组来讨论有关 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();

其余的可以在http://jsfiddle.net/K543c/17/看到

关于javascript - javascript 中的数据上下文交互 (DCI) 和事件编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12784276/

相关文章:

.Net Web 架构文献

html - CSS 中彩色透明图像图案

javascript - jQuery - 灯箱缩略图在 PHP 5.3 中不起作用

javascript - 类型错误 : object is not a function - what am I doing wrong?

asp.net-mvc - MVC 3 - 新区域 - 404 错误 - 找不到资源 - 已尝试路由调试器

objective-c - MVC 和使用 UIButton 动态创建 UI 元素

c++ - 避免在多线程环境中删除单例

JavaScript 函数 : var func = someFunction() and var func = someFunction?

javascript - Cckeditor 在初始化期间删除 html5 视频 block

JAVA MVC - 将用户名传递给另一个servlet