SDK 库的配置数据

Configuration data for the SDK Library

我正在编写两个软件。

  1. SDK(将存在于 node_modules)
  2. 使用SDK的应用程序

我希望 SDK 是通用的并且能够处理应用程序传递的一些配置数据。

问题是,SDK 中有多个参与者(.js 模块),其余参与者(.js 模块)如何访问我传递给主 SDK 模块的配置数据(lib/index.js),或者当涉及到配置数据时,它在 nodejs SDK 世界中是如何工作的。

配置数据是高度可重用的,我的SDK库中的每个actor都需要这个配置数据,我的objective是将它传递一次到主JS模块(index.js)然后休息的模块为了它们的操作而接触到它。

我希望它很清楚,我可以进一步完善我的问题,请发表评论。

编辑。

假设我 app.js

var SDK = require("./sdk");
SDK("key", "secret");

var M1 = require("./sdk/m1");
var m1 = new M1();
m1.doSomething();

var M2 = require("./sdk/m2");
var m2 = new M2();
m2.doSomethikng()

SDK.js

var SDK = function(key, secret) {
    this.key = key;
    this.secret = secret;
}

module.exports = SDK;

sdk/M1.js

var M1 = function() {}
M1.prototype.doSomething = function() {
    //uses key and secret
}
module.exports = M1;

sdk/M2.js

var M2 = function() {}
M2.prototype.doSomething = function() {
    //uses key and secret
}
module.exports = M2;

有很多架构方法可以做到这一点,在不知道您的用例和您使用的创建模式的情况下很难说哪一种是最好的。

一个简单的例子可能是,使用将配置(或副本)传递给彼此的工厂:基本上你让你的 sdk 创建它的依赖项

// mysdk/index.js
const myLib = require('./lib/myLib');
module.exports = function sdkFactory(options){
  const {configuration} = options;
  const libInstance = myLib(configuration);
 //your sdk api
  return {
    method1:function(){
      //whatever using the libInstance
      return libInstance.foo();
    }, 
   //etc
  }
}

所以你的客户端代码可以使用它

const sdkFactory = require('sdk');
const sdk = sdkFactory({configuration:{prp:'val'}});
sdk.method1();
//etc

您可以使用 dependency injection pattern,以及许多其他的。

我建议你看看你日常使用的流行库的源代码,这样你就可以了解good/bad实践

最简单的形式:只需要构造函数中的所有外部内容。

Actor.js

function Actor(sdkConfig,config){
   this.sdkConfig = sdkconfig;
   this.config = config;
}

Actor.prototype.doSomething = function(){};

.....

Actor.prototype.doSomethingElse = function(){};

module.exports = Actor;     

然后,通过 Sdk 实例授予对新 Actors 实例的访问权限:

Sdk.js

function Sdk(config){
  this.config = config;
}

Sdk.prototype.createActor = function(actorConfig){
   return new Actor(this.config,actorConfig);
}

module.exports = Sdk;

用法

var Sdk = require("Sdk");

var sdk = new Sdk({"sdkSetting":true});

var actor = sdk.createActor({"actorSetting":false});

这是我在主模块上没有工厂方法的情况下发现的模式(我的几个模块中的每一个都没有工厂方法),而其他参与者仍然可以访问主模块持有的配置数据只要。

app.js

var SDK = require("./sdk");

SDK.config = {key: "key", secret: "secret"};

var m1 = new SDK.M1();
m1.doSomething();

sdk.js

var SDK = function(){};

SDK.config = {key: null, secret: null};

module.exports = SDK;

require("./m1"); //executing other modules to make it work

m1.js

var SDK = require("./sdk");

var M1 = function(){};

M1.prototype.doSomething = function(){
    var config = SDK.config //getting access to main module's config data
};

SDK.M1 = M1;

与系统的其他参与者一样,没有传递配置参数并强制每个参与者有一个相似的构造函数。