OOP node.js 框架 Danf 是否确保接口?
Are interfaces ensured in the OOP node.js framework 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#'
}
}
};
即使我没有在接口中指定它,我是否可以在通知程序中调用侦听器的方法"doUpdate" "listener"?
在Danf中,当您定义Notifier.defineDependency('_listener', 'listener');
时,将在通知程序使用的侦听器上创建一个代理。此代理阻止您使用接口 listener
.
中指定的以外的任何其他内容
总而言之,是的,接口是有保障的,不,你将无法在通知程序中调用方法doUpdate
。
但是,由于此功能需要很多性能(因为它不是内置的 javascript 功能),所以它只是 enabled in debug mode.
在 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#'
}
}
};
即使我没有在接口中指定它,我是否可以在通知程序中调用侦听器的方法"doUpdate" "listener"?
在Danf中,当您定义Notifier.defineDependency('_listener', 'listener');
时,将在通知程序使用的侦听器上创建一个代理。此代理阻止您使用接口 listener
.
总而言之,是的,接口是有保障的,不,你将无法在通知程序中调用方法doUpdate
。
但是,由于此功能需要很多性能(因为它不是内置的 javascript 功能),所以它只是 enabled in debug mode.