有没有办法在 angular 中对服务进行分组?
Is there a way to group services in angular?
我有一个稀疏项目,通过它的许多组件调用一个服务从 API 服务器获取数据。该服务处理从登录到彼此没有直接影响的多个其他功能。然而,将它们分开会给必须导入多个服务的构造函数带来麻烦。例如,这个:
@Component()
class ComponentExemple {
constructor(private back: BackendService) {}
}
会变得更像这样
@Component()
class ComponentExemple {
constructor(
private back: BackendService0,
private back: BackendService1,
private back: BackendService2,
private back: BackendService3,
...
) {}
}
我要问的是:有没有办法将多个服务组合成一个?(就像 class 可以扩展另一个父 class,但在这种情况下,它需要扩展多个其他父 classes)。像这样:
@Injectable()
export class BackendService extends DataService1, DataService2, ... { }
即使那是不可能的(我想这不太可能),是否有一些指南可以使构造函数参数不那么混乱?
我需要模块化这个后端服务,以便更容易维护代码,其他贡献者也是如此。
您可以尝试使用 mixins 进行某种多重扩展,但我建议改用组合:
@Injectable()
export class BackendService {
constructor(
public data1: DataService1,
public data2: DataService2,
public data3: DataService3,
public data4: DataService4
) {}
}
@Component()
class ComponentExemple {
constructor(
private back: BackendService,
) {}
ngOnInit() {
this.back.data1.getStuff();
}
}
您可以将单个服务声明为许多其他服务的实现。
@NgModule({
...
providers: [
{ provide: DataService1, useClass: BackendService},
{ provide: DataService2, useClass: BackendService},
...
]
}
@Injectable()
export class BackendService implements DataService1, DataService2, ... { }
请注意我是如何使用 implements
而不是 extends
的。
因此,您的 DataServices 表现为接口。 BackendService不会继承任何方法,需要像写Facade一样把所有的方法都写好。
然后就可以开始逐步重构,实现DataService1等等。
我有一个稀疏项目,通过它的许多组件调用一个服务从 API 服务器获取数据。该服务处理从登录到彼此没有直接影响的多个其他功能。然而,将它们分开会给必须导入多个服务的构造函数带来麻烦。例如,这个:
@Component()
class ComponentExemple {
constructor(private back: BackendService) {}
}
会变得更像这样
@Component()
class ComponentExemple {
constructor(
private back: BackendService0,
private back: BackendService1,
private back: BackendService2,
private back: BackendService3,
...
) {}
}
我要问的是:有没有办法将多个服务组合成一个?(就像 class 可以扩展另一个父 class,但在这种情况下,它需要扩展多个其他父 classes)。像这样:
@Injectable()
export class BackendService extends DataService1, DataService2, ... { }
即使那是不可能的(我想这不太可能),是否有一些指南可以使构造函数参数不那么混乱?
我需要模块化这个后端服务,以便更容易维护代码,其他贡献者也是如此。
您可以尝试使用 mixins 进行某种多重扩展,但我建议改用组合:
@Injectable()
export class BackendService {
constructor(
public data1: DataService1,
public data2: DataService2,
public data3: DataService3,
public data4: DataService4
) {}
}
@Component()
class ComponentExemple {
constructor(
private back: BackendService,
) {}
ngOnInit() {
this.back.data1.getStuff();
}
}
您可以将单个服务声明为许多其他服务的实现。
@NgModule({
...
providers: [
{ provide: DataService1, useClass: BackendService},
{ provide: DataService2, useClass: BackendService},
...
]
}
@Injectable()
export class BackendService implements DataService1, DataService2, ... { }
请注意我是如何使用 implements
而不是 extends
的。
因此,您的 DataServices 表现为接口。 BackendService不会继承任何方法,需要像写Facade一样把所有的方法都写好。
然后就可以开始逐步重构,实现DataService1等等。