mercredi 15 mars 2017

Node modules as constructor function

I'm working on my first NodeJS project. I started building modules in the classical way as I read on books and over the internet. As the project started growing I decided to split modules in small reusable pieces. That lead me to have a lot of require at the top of the file and sometime the risk to tackle circular dependencies. Moreover, this approach, doesn't really fits with testing because I had to require all the dependencies to make tests. I asked other developers a better way to solve this problem and most of them suggested me to use dependency injection with function constructor.

Suppose I have ModuleA and ModuleB, ModuleC requires both ModuleA and ModuleB. Instead of requiring these modules an the top of the page I should pass them as argument in a constructor function. e.g.

module.exports = function ModuleC(moduleA, moduleB) {
 //module implementation here....
 function doSomething() {}
 return {
   doSomething
 }
}

the problem with this approach, that at first looked good, is that in the main entry point of the application I have to require and instantiate all the module to pass.

const ModuleA = require("./moduleA");
const ModuleB = require("./moduleB");
const ModuleC = require("./moduleC");

const moduleA = new ModuleA();
const moduleB = new ModuleB();


const moduleC = new ModuleC(moduleA, moduleB);
moduleC.doSomething();

Now with only 3 modules I had to write 7 line of code to use a function of a module. If I had 20 modules to work with the main entry point of the application would be a nightmare.

I guess this is not the best approach and even with this method, testing is not easy.

So, I ask you to suggest/explain me the best way to achieve this simple task that I'm finding, maybe harder than it is, while starting exploring the NodeJS word. Thanks.

Aucun commentaire:

Enregistrer un commentaire