设计模式:使用es6 export const进行依赖注入

时间:2016-08-14 23:58:06

标签: javascript design-patterns dependency-injection ecmascript-6

我一直在考虑在使用es6构建的快速应用中实现依赖注入的想法。 实际项目如下所示:

/controllers/myController.controller.js

import express from 'express';
import MyModel from '/models/myModel.model.js';

class MyController{
  constructor(){
    this.router = express.Router();
  }
  getAll(){
    var modelInstance = new MyModel();
    this.router.get('/', (req , res) => {
      res.send(modelInstance.getData());
    });
  }
}

/models/myModel.model.js

export class MyModel{
  constructor(){
  }
  getData(){
    return 'it\'s working';
  }
}

但我认为更好的想法是导出这样的类实例:

/models/myModel.model.js

class MyModel{
  constructor(){
  }
  getData(){
    return 'it\'s working';
  }
}
//export a new instance
export const ModelInstance = new MyModel();

然后像这样修改控制器

/controllers/myController.controller.js

import express from 'express';
//inject a new instance of the model
import {modelInstance} from '/models/myModel.model.js';

class MyController{
  constructor(){
    this.router = express.Router();
  }
  getAll(){
    this.router.get('/', (req , res) => {
      res.send(modelInstance.getData());
    });
  }
}

我不知道我的想法是否正确,但我认为这个例子对于这种模式来说是一个很好的应用。

您对此有何看法?

1 个答案:

答案 0 :(得分:-1)

考虑到class语法是好老prototype的语法糖,我没有看到实例化单个MyModel的意义,我认为你' d而是使用Object{})作为单身人士:

export const myInstance = {
  getData() {
    return 'it\'s working';
  }
}

顺便说一句,你对依赖注入意味着什么?此代码中没有,但您可以阅读有关它的更多信息here