【问题标题】:Design patterns: Using es6 export const for dependency injection设计模式:使用 es6 export const 进行依赖注入
【发布时间】:2016-08-14 23:58:06
【问题描述】:

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

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

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

您对此有何看法?

【问题讨论】:

  • 你发明了一个单例。
  • @zerkms 不是工厂吗?
  • export const ModelInstance = new MyModel(); --- 不是,您创建一个实例并提供对它的全局访问。
  • @zerkms 哦,谢谢。我测试了它,你是对的。这是一个单身人士!
  • @zerkms 如何按照工厂模式导出?

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


【解决方案1】:

考虑到 class 语法是旧 prototype 的语法糖,我看不出实例化单个 MyModel 的意义,我认为您宁愿使用 Object ({} ) 对于单身人士:

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

顺便问一下,依赖注入是什么意思?这段代码中没有,但你可以阅读更多关于它的信息here

【讨论】:

  • “考虑到类语法是旧原型的语法糖”——这样对待它是有害的。考虑到 JS 是 CPU 指令和电信号的语法糖。
  • @zerkms 哦,来吧。只要你是迂腐的,你真正的意思是 JS 是 JS 引擎的语法糖,它是任何实现它的语法糖,它是处理器指令集的语法糖,它是语法糖在它的微码上,这是在它的硬件上的语法糖,等等。但是有什么意义呢? ES2015 类是 JS 的 OOP 的语法糖。就本问题而言,这是必要的抽象级别。
  • “但有什么意义呢?” --- 关键是它是一个不同的抽象,它在底层如何实现并不重要。
  • @DaveNewton “ES2015 类是 JS 的 OOP 的语法糖”——这样对待它是有害的。我真的不知道为什么人们会故意破坏有用的抽象。一切都只是一点点。
  • @zerkms 所以用 FPGA 编写你的网站(显然没有 Verilog 或 VHDL)。我的时间有更好的事情要做,比如在有意义的时候使用有用的抽象。 YMMV。
猜你喜欢
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多