节点库暴露具有依赖关系的组件
Node library exposing components with dependencies
我正在开发一个基于 Knex 的 Node.js ORM 库,类似于 Bookshelf,用于其他个人项目。
我的库的某些组件需要 Knex 的初始化实例,因此我将它们包装在一个对象中,该对象在构造函数中获取 Knex 实例,使用包装函数插入 Knex 对象,而无需用户在任何时候插入它使用图书馆。我试着用类似于 Knex 和 Bookshelf 的方式来做,但是我发现代码很难阅读,而且我使用的是 ES6 类,所以不太一样。
这是我当前的代码:
const _Entity = require('./Entity.js');
class ORM {
constructor(knex) {
// wrapper for exposed class with Knex dependency;
// knex is the first argument of Entity's constructor
this.Entity = function(...args) {
return new _Entity(knex, ...args);
};
// exposed class without Knex dependency
this.Field = require('./Field.js');
}
}
function init(knex) {
return new ORM(knex);
}
module.exports = init;
想法是用户可以像这样使用它:
const ORM = require('orm')(knex);
const Entity = ORM.Entity;
const Field = ORM.Field;
const User = new Entity('user', [
new Field.Id(),
new Field.Text('name'),
// define columns...
]);
let user = User.get({id: 5});
令我困扰的是 Entity
只是间接暴露,而且代码对我来说看起来很奇怪。有没有更优雅或 "standard" 的方法来公开具有依赖关系的组件?
就用一个正则函数? :
const _Entity = require('./Entity.js');
const Field = require('./Field.js');
module.exports = function init(knex){
return {
Field,
Entity: _Entity.bind(_Entity, knex)
};
};
我正在开发一个基于 Knex 的 Node.js ORM 库,类似于 Bookshelf,用于其他个人项目。
我的库的某些组件需要 Knex 的初始化实例,因此我将它们包装在一个对象中,该对象在构造函数中获取 Knex 实例,使用包装函数插入 Knex 对象,而无需用户在任何时候插入它使用图书馆。我试着用类似于 Knex 和 Bookshelf 的方式来做,但是我发现代码很难阅读,而且我使用的是 ES6 类,所以不太一样。
这是我当前的代码:
const _Entity = require('./Entity.js');
class ORM {
constructor(knex) {
// wrapper for exposed class with Knex dependency;
// knex is the first argument of Entity's constructor
this.Entity = function(...args) {
return new _Entity(knex, ...args);
};
// exposed class without Knex dependency
this.Field = require('./Field.js');
}
}
function init(knex) {
return new ORM(knex);
}
module.exports = init;
想法是用户可以像这样使用它:
const ORM = require('orm')(knex);
const Entity = ORM.Entity;
const Field = ORM.Field;
const User = new Entity('user', [
new Field.Id(),
new Field.Text('name'),
// define columns...
]);
let user = User.get({id: 5});
令我困扰的是 Entity
只是间接暴露,而且代码对我来说看起来很奇怪。有没有更优雅或 "standard" 的方法来公开具有依赖关系的组件?
就用一个正则函数? :
const _Entity = require('./Entity.js');
const Field = require('./Field.js');
module.exports = function init(knex){
return {
Field,
Entity: _Entity.bind(_Entity, knex)
};
};