我正在用 Typescript 编写一个服务,我采用了基于类的方法并在每个请求上创建控制器对象,这是好还是坏的做法?

问题描述 投票:0回答:1

在控制器中

class myController{
  constructor(req, res, next){
    this.req = req;
    this.res = res;
    this.next = next;
  }

 // method1
 func1(){}

 func2(){}

}

在路线中

router.get('/home', (req, res, next) => {
  new myController(req, res, next).func1()
})

虽然在所有博客中我都发现了像这样的单例类

class myController {
  myfunc(req, res){
    // logic
  }
}

export new myController()

哪种方法更好?在每个请求上创建对象有什么缺点?

尝试在每个请求上创建对象

node.js typescript oop model-view-controller
1个回答
0
投票

首先,您采用的方法与 Nest.js 框架非常相似。因此,如果您想在生产中以 OOP 风格编写代码 - 如果可能的话,您可能应该学习/使用 Nest.js,因为它具有许多出色的功能,您不必考虑这些东西。

回到你的问题:

  • 使用单例和创建新对象实例的区别在于内存使用。假设您每秒有 100 个请求。然后,在第一种方法中,您必须每秒创建 100 个对象,一段时间后您将扔掉它们(GC 会为您做这件事)。它可能会产生一些性能开销,但很难说有多大。使用单例时,您为每个请求使用一个对象。
  • 使用单例的缺点当然是,如果您有一堆使用 req / res 的方法 - 您必须将它们传递给每个方法,所以我明白为什么要将它们存储在对象中。尽管我看不到创建这些单例对象有任何好处,但为什么不将你的 merhods 作为一堆函数导出呢?您可以将文件命名为
    users.controller.ts
    并将控制器功能导出为默认值。
© www.soinside.com 2019 - 2024. All rights reserved.