是否在OOP node.js框架中确保了接口Danf?

时间:2015-02-16 07:36:36

标签: 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#'
        }
    }
};

即使我没有在“listener”接口中指定侦听器的方法“doUpdate”,我是否能够调用该方法的“doUpdate”?

1 个答案:

答案 0 :(得分:2)

Danf中,当您定义Notifier.defineDependency('_listener', 'listener');时,会在通知程序使用的侦听器上创建代理。此代理禁止您使用除界面listener中指定的内容之外的任何内容。

总而言之,是的,界面得到了保证,您无法在通知程序中调用方法doUpdate

但是,由于此功能需要大量演出(因为它不是内置的javascript功能),因此只有enabled in debug mode