【问题标题】:Using singleton design pattern for better code quality使用单例设计模式获得更好的代码质量
【发布时间】:2019-09-16 20:46:05
【问题描述】:

我们有一个带有多个端点的 node-express 应用程序。我们创建了 5 种不同的服务来执行不同的工作,例如进行 HTTP 调用、处理/修改数据、缓存数据、搜索特定数据等。

我们意识到我们创建的服务不是单例的。服务被实例化为左右和中心。总共创建了 26 个对象。 我们改变了这一点,使我们的所有服务单例,现在整个应用程序中只创建了 5 个对象。我们现在想正确地构建应用程序。

我们希望每个快速路由调用DataService(它会检查该数据是否在CacheService 中可用,如果没有,则进行 HTTP 调用并将数据存储在缓存中并将数据返回到快速路由)。 但是,当前代码使用CacheServiceDataService 一起检查缓存中的数据是否可用或使用DataService 获取新数据。推荐哪种方法?使用一个服务(Dataservice)内部使用多个服务(CacheService, DataModificationService),或者在快速路由中一起使用所有服务(DataService, CacheService, DataModificationService

在将类设为单例之前,我们使用的是static classes。我们甚至需要使服务单例或继续使用静态类吗?哪个更推荐?为什么?

这是我们为创建单例服务而编写的代码。这是正确的方法吗?

class DataService {

  private dataModificationService: DataModificationService;
  private tokenService: TokenService;

  private constructor(tokenService: TokenService, dataModificationService: DataModificationService) {
    this.tokenService = tokenService;
    this.dataModificationService = dataModificationService;
  }

  public static getInstance(): DataService {
    const dataModificationService: DataModificationService = DataModificationService.getInstance();
    const tokenService: TokenService = TokenService.getInstance();

    if (!DataService.instance) {
      DataService.instance = new DataService(tokenService, dataModificationService);
    }

    return DataService.instance;
  }
}

【问题讨论】:

  • “单例”和“代码质量”是对立的。我猜你真正要找的是依赖注入。

标签: javascript typescript design-patterns singleton


【解决方案1】:

很高兴您减少了单例的数量。现在试着摆脱剩下的!

从静态类更改为单例对象通常没有什么区别——它们都是使东西全局化的方式。

你需要做的是查看有多少地方使用了每个单例,如果使用是本地化的,那么尝试用依赖注入替换单例。没什么花哨的,只需将 DataService 的(非静态)实例或其他任何内容作为需要的参数传递。如果这样会创建太多代码,那么您所做的一切都很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    相关资源
    最近更新 更多