0

我在思考如何实现依赖项注入在使用es6构建的快速应用程序中。 实际的项目看起来是这样的:设计模式:使用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()); 
    }); 
    } 
} 

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

您对此有何看法?

+0

你发明了一个单身人士。 – zerkms

+0

@zerkms不是工厂? –

+0

'export const ModelInstance = new MyModel();'---它不是,您创建一个实例并提供对其的全局访问。 – zerkms

回答

-1

考虑到class语法是好老prototype语法糖,我没有看到实例化一个单一MyModel的地步,我想你想用Object{})为单身:

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

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

+1

“考虑到类语法是用于旧的原型的语法糖”---这样对待它是有害的。考虑JS是CPU指令和电信号的语法糖。 – zerkms

+1

@zerkms哦,来吧。只要你是迂腐的,你真正的意思是JS是JS引擎上的语法糖,它是语法上的糖,不管它是在什么语言中实现的,它是处理器指令集中的语法糖,语法糖是语法糖在它的微码上,这是它的硬件上的语法糖,等等。但是有什么意义呢? ES2015类是JS的OOP语法糖。就这个问题而言,这是必要的抽象层次。 –

+0

“但是有什么意义?” ---重点在于它是一种不同的抽象,并且它在底层实现的方式并不重要。 – zerkms