javascript - OOP Node.js 框架 Danf 是否确保了接口(interface)?

标签 javascript node.js oop frameworks danf

在 Danf 中,如果我定义两个这样的类:

// lib/server/listener.js

'use strict';

/**
 * Expose `Listener`.
 */
module.exports = Listener;

/**
 * Initialize a new listener.
 */
function Listener() {
    this._listener;
}

Listener.defineImplementedInterfaces(['listener']);

/**
 * @interface {listener}
 */
Listener.prototype.update = function() {
    // Do something...

    this.doUpdate();
}

Listener.prototype.doUpdate = function() {
    // Do something...
}

// lib/server/notifier.js

'use strict';

/**
 * Expose `Notifier`.
 */
module.exports = Notifier;

/**
 * Initialize a new notifier.
 */
function Notifier() {
    this._listener;
}

Notifier.defineImplementedInterfaces(['notifier']);

Notifier.defineDependency('_listener', 'listener');

/**
 * @interface {notifier}
 */
Notifier.prototype.notify = function(notifier) {
    listener.update();
    // listener.doUpdate(); // Is it possible?
}

Object.defineProperty(Notifier.prototype, 'listener', {
    set: function(listener) { this._listener = listener; }
});

使用以下配置:

// config/server/config/interfaces.js

'use strict';

module.exports = {
    listener: {
        methods: {
            update: {
                arguments: ['string/value']
            }
        }
    },
    notifier: {
        methods: {
            notify: {}
        }
    }
};

// config/server/config/services.js

'use strict';

module.exports = {
    listener: {
        class: 'listener'
    },
    notifier: {
        class: 'notifier',
        properties: {
            listener: '#listener#'
        }
    }
};

即使我没有在接口(interface)“listener”中指定它,我是否可以在通知程序中调用监听器的“doUpdate”方法?

最佳答案

Danf ,当您定义 Notifier.defineDependency('_listener', 'listener'); 时,将在通知程序使用的监听器上创建代理。该代理会阻止您使用接口(interface)listener中指定的内容以外的任何内容。

总而言之,是的,接口(interface)是有保证的,不,你将无法在通知程序中调用方法doUpdate

但是,由于该功能需要大量的性能(因为它不是内置的 javascript 功能),因此仅 enabled in debug mode .

关于javascript - OOP Node.js 框架 Danf 是否确保了接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28536562/

相关文章:

javascript - 将项目拖放到仅包含排除项目的可排序列表中

javascript - Jquery 图像预加载器(我如何让loading.gif 更快地出现)

node.js - 如何在 sails.js 0.12 cors.js 文件中添加多个源

c++ - 实现数组初始化器

javascript - 为什么我在 Javascript 中实现寄生继承的努力在这里失败了?

javascript - React 如何搜索(过滤)数组中的所有字段?

Javascript - javascript 可以在浏览器选项卡未处于焦点时运行吗?

node.js - node.js 中的压缩

php - 与使用 PHP 等为移动应用程序创建的普通 API 相比,将 Node.js 用于 API 有什么好处吗?

javascript - 使此关键字引用实例而不是窗口对象