使用单例设计模式以获得更好的代码质量



我们有一个具有多个端点的节点快速应用程序。我们创建了 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;
}
}

你减少了单例的数量是件好事。 现在尝试摆脱其余的!

从静态类更改为单例对象通常没有区别 - 它们都只是使内容全局化的方式。

您需要做的是查看有多少地方使用每个单例,如果用法是本地化的,则尝试用依赖注入替换单例。 没有什么花哨的,只需在需要时将 DataService 的(非静态(实例或任何内容作为参数传递即可。 如果这会创建太多代码,那么你所做的是完全没问题的。

最新更新