【发布时间】:2019-09-16 20:46:05
【问题描述】:
我们有一个带有多个端点的 node-express 应用程序。我们创建了 5 种不同的服务来执行不同的工作,例如进行 HTTP 调用、处理/修改数据、缓存数据、搜索特定数据等。
我们意识到我们创建的服务不是单例的。服务被实例化为左右和中心。总共创建了 26 个对象。 我们改变了这一点,使我们的所有服务单例,现在整个应用程序中只创建了 5 个对象。我们现在想正确地构建应用程序。
我们希望每个快速路由调用DataService(它会检查该数据是否在CacheService 中可用,如果没有,则进行 HTTP 调用并将数据存储在缓存中并将数据返回到快速路由)。
但是,当前代码使用CacheService 和DataService 一起检查缓存中的数据是否可用或使用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