Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 设计模式:使用es6导出常量进行依赖注入_Javascript_Design Patterns_Dependency Injection_Ecmascript 6 - Fatal编程技术网

Javascript 设计模式:使用es6导出常量进行依赖注入

Javascript 设计模式:使用es6导出常量进行依赖注入,javascript,design-patterns,dependency-injection,ecmascript-6,Javascript,Design Patterns,Dependency Injection,Ecmascript 6,我一直在考虑在使用es6构建的express应用程序中实现依赖注入的想法。 实际项目如下所示: /controllers/myController.controller.js import express from 'express'; import MyModel from '/models/myModel.model.js'; class MyController{ constructor(){ this.router = express.Router(); } get

我一直在考虑在使用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());
    });
  }
}
export class MyModel{
  constructor(){
  }
  getData(){
    return 'it\'s working';
  }
}
class MyModel{
  constructor(){
  }
  getData(){
    return 'it\'s working';
  }
}
//export a new instance
export const ModelInstance = new MyModel();
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());
    });
  }
}
/models/myModel.model.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());
    });
  }
}
export class MyModel{
  constructor(){
  }
  getData(){
    return 'it\'s working';
  }
}
class MyModel{
  constructor(){
  }
  getData(){
    return 'it\'s working';
  }
}
//export a new instance
export const ModelInstance = new MyModel();
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());
    });
  }
}
但我认为更好的方法是导出类的实例,如下所示:

/models/myModel.model.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());
    });
  }
}
export class MyModel{
  constructor(){
  }
  getData(){
    return 'it\'s working';
  }
}
class MyModel{
  constructor(){
  }
  getData(){
    return 'it\'s working';
  }
}
//export a new instance
export const ModelInstance = new MyModel();
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());
    });
  }
}
然后像这样修改控制器

/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());
    });
  }
}
export class MyModel{
  constructor(){
  }
  getData(){
    return 'it\'s working';
  }
}
class MyModel{
  constructor(){
  }
  getData(){
    return 'it\'s working';
  }
}
//export a new instance
export const ModelInstance = new MyModel();
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());
    });
  }
}
我不知道我的想法是否正确,但我认为这个例子是关于这个模式的一个很好的应用


您对此有何看法?

考虑到
语法是好的
原型
的语法糖,我不认为实例化单个
MyModel
有什么意义,我认为您更愿意为单身人士使用
对象(
{}
):

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

顺便问一下,依赖注入是什么意思?这段代码中没有任何内容,但您可以阅读更多有关它的内容。

您已经发明了一个单例。@zerkms不是工厂?
export const modelness=new MyModel()---不是这样,您创建一个实例并提供对它的全局访问。@zerkms噢,谢谢。我测试过了,你是对的。是单身汉@zerkms我如何能够按照工厂模式导出?“考虑到类语法是好的旧原型的语法糖”——这样对待它是有害的。考虑JS是CPU指令和电信号的语法糖。只要你是学究,你真正的意思是JS是JS引擎上的语法糖,它是JS引擎上的语法糖,它是处理器指令集上的语法糖,它是微代码上的语法糖,它是硬件上的语法糖,等等,但重点是什么?ES2015类是JS OOP之上的语法糖。就这个问题而言,这是必要的抽象级别。“但重点是什么?”——重点是这是一个不同的抽象,它实际上并不在乎如何在后台实现。@DaveNewton“ES2015类是JS的OOP之上的语法糖”——这样对待它是有害的。我真的不知道人们为什么故意破坏有用的抽象概念。一切都只是比特。@zerkms所以用FPGA编码你的网站(显然没有Verilog或VHDL)。在我的时间里,我有更好的事情要做,比如在有意义的时候使用有用的抽象概念。YMMV。