Javascript 设计模式:使用es6导出常量进行依赖注入
我一直在考虑在使用es6构建的express应用程序中实现依赖注入的想法。 实际项目如下所示: /controllers/myController.controller.jsJavascript 设计模式:使用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
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。