【问题标题】:A better way to inject Typescript dependencies in Node.js?在 Node.js 中注入 Typescript 依赖项的更好方法?
【发布时间】:2020-12-12 13:25:31
【问题描述】:

我正在使用 Typescript 在 Node.js 和 Express 中开发后端解决方案。我正在尝试进行类似于 Angular 的依赖注入,但缺少 @Injectable() 装饰器我正在这样做:

依赖:

export class SomeDependency {
  public someMethod() {
    console.log('Some method is running');
  }
}

家长:

import { SomeDependency } from './someDependency';

export class Whatever {

  constructor(
    private someDependency = new SomeDependency()
  ) {}

  public doSomething() {
    console.log('Look, I\'m doing something!');
    this.someDependency.someMethod();
  }
}

它有效,但它可能不是最好的方法。任何关于如何改进它的建议都值得赞赏。

另一方面,你们怎么看:像这样在构造函数中导入依赖项,还是每次或大部分时间都创建new 实例更好?像这样:

import { SomeDependency } from './someDependency';

export class Whatever {

  public doSomething() {
    console.log('Look, I\'m doing something!');
    new someDependency().someMethod();
  }
}

由于SomeDependency 不是单例,我想知道哪个效率较低:在父级中保持一个实例处于活动状态,或者每次都创建一个新实例,让垃圾收集器在调用完成时处理它。

【问题讨论】:

  • IMO,我建议您仅在需要将数据与对该数据进行操作的方法捆绑在一起时才使用 class。如果您只有方法,那么普通函数(或函数对象)会更有意义。如果你只有数据,一个普通的对象或数组会更有意义。对于这里的这个例子,我会做 import { someMethod } from './someMethod'; 其中someMethod 是函数 - 然后只需在需要时调用函数。
  • 我认为很多对类的混淆和过度使用可能来自于像 Java 这样具有 OO 背景的人——但 JS 完全不同
  • 谢谢,但这只是我正在做的更复杂事情的一个简单示例。依赖项通常是一个控制器或具有数十种方法的 Express 中间件。所以只导入一个函数是不行的。
  • 嗨,你知道依赖注入工具的 tsyringetypediinversifyJs 吗?另外这篇帖子Dependency injection stackoverflow 可以帮助你:-)

标签: node.js typescript dependency-injection


【解决方案1】:

您的用例是绝对正确的。保持模块轻耦合始终是一个好习惯。所以,将来你可以在不触及主要逻辑的情况下在实现之间切换,但是 Javascript 或 Typescript 不提供依赖注入机制。

要实现这一点,您可以使用称为 Inversify 的库。

Inversify 是 JavaScript 和 NodeJS 的强大且轻量级的控制容器反转。它实现了 IoC 并允许我们注入依赖项,将我们的方法与任何实现细节解耦

它为您提供与我们在 Angular 中使用的功能相同的功能,例如您可以使用 @Injectable() 注释对类进行注释并执行依赖注入。

参考你可以去:https://www.linkedin.com/pulse/how-use-dependency-injection-nodejs-typescript-projects-ribeiro

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-26
    • 2013-04-10
    • 2017-01-15
    • 2021-01-25
    • 2020-02-05
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    相关资源
    最近更新 更多