typescript 将命名空间添加到Angular服务[已关闭]

5fjcxozz  于 2023-05-23  发布在  TypeScript
关注(0)|答案(1)|浏览(161)

已关闭,此问题为opinion-based。目前不接受答复。
**想改善这个问题吗?**更新问题,以便editing this post可以用事实和引用来回答。

2天前关闭。
Improve this question
我有一个Angular v16中的Web客户端,它有一个非常分散的API服务,对20个数据库实体中的每个实体有大约10个不同的调用,像这样:

  • addUser
  • deleteUser
  • updateUser
  • 等等……很多其他的事情

...然后是20倍,对于每个数据实体。
我想以某种方式将它重构为名称空间,这样客户端就可以开始使用它了:

constructor(private api: ApiService) {
    this.api.user.add(params);
}

目前是否有建议的方法来实施这一点?或者至少有什么好的方法来实现这一点?

km0tfn4u

km0tfn4u1#

由于Angular中的服务是单例的,我发现最好的方法是将名称空间组织为服务内部的readonly对象:

@Injectable({
  providedIn: 'root'
})
export class ApiService {
  constructor(private http: HttpClient) {
  }

  readonly users = {
     all: () => this.http.get<IUser[]>(`api/users/all`),
     get: (userId: string) => this.http.get<IUser>(`api/user/${userId}`),
     add: (user: IUser) => this.http.put<string>(`api/user`, user),
     update: (user: IUser) => this.http.patch(`api/user`, user),
     delete: (id: string) => this.http.delete(`api/user/${id}`),
  }

}

这将防止为每次客户端使用重新创建命名空间或任何对象。

相关问题