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