SDK库的配置数据

时间:2016-06-17 19:04:46

标签: node.js configuration architecture sdk

我正在编写两个软件。

  1. SDK(将在node_modules下生效)
  2. 使用SDK的应用程序
  3. 我希望SDK是通用的,并且能够处理应用程序传递的一些配置数据。

    问题是,SDK中有几个actor(.js模块),其余的actor(.js模块)如何访问我传递给主SDK模块的配置数据(lib / index)。 js),或者说在配置数据方面在nodejs SDK世界中是如何工作的。

    配置数据是高度可重用的,我的SDK库中的每个actor都需要这个配置数据,我的目标是将它传递给主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;
    

3 个答案:

答案 0 :(得分:0)

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

一个简单的例子可能是,使用将配置(或副本)传递给彼此的工厂:基本上你让你的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和其他许多人。

我建议你看一下你每天使用的流行图书馆的源代码,这样你就可以了解好/坏的做法

答案 1 :(得分:0)

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

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});

答案 2 :(得分:0)

这是我在主模块上没有Factory方法时发现的模式(我的几个模块中没有工厂方法),而其他actor仍然可以访问仅由主模块保存的配置数据。

<强> 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;

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