Angular 有没有一种方法可以将服务分组?

Angular 有没有一种方法可以将服务分组?,angular,typescript,inheritance,angular-services,Angular,Typescript,Inheritance,Angular Services,我有一个稀疏项目,通过它的许多组件调用一个服务来从API服务器获取数据。此服务处理从登录到多个其他功能之间没有直接影响的情况。然而,分离它们会使构造函数不得不导入多个服务,这会造成麻烦。例如,这: @Component() 类组件示例{ 构造函数(专用后台:后端服务){} } 会变得更像这样 @Component() 类组件示例{ 建造师( 专用备份:BackendService0, 私人备份:BackendService1, 私人备份:BackendService2, 私人备份:Backen

我有一个稀疏项目,通过它的许多组件调用一个服务来从API服务器获取数据。此服务处理从登录到多个其他功能之间没有直接影响的情况。然而,分离它们会使构造函数不得不导入多个服务,这会造成麻烦。例如,这:

@Component()
类组件示例{
构造函数(专用后台:后端服务){}
}
会变得更像这样

@Component()
类组件示例{
建造师(
专用备份:BackendService0,
私人备份:BackendService1,
私人备份:BackendService2,
私人备份:BackendService3,
...
) {}
}
我想问的是:有没有办法将多个服务组合成一个服务?(就像一个类可以扩展另一个父类一样,但在这种情况下,它需要扩展多个其他父类)。像这样:

@Injectable()
导出类后端服务扩展了DataService1、DataService2。。。{ }
即使这是不可能的(我想这是不容易做到的),是否有一些指导方针来减少构造函数参数的混乱


我需要将此后端服务模块化,以便更容易维护代码和其他贡献者。

您可以尝试使用mixin进行某种类型的多扩展,但我建议改用composition:

@Injectable()
导出类后端服务{
建造师(
公共数据1:DataService1,
公共数据2:DataService2,
公共数据3:DataService3,
公共数据4:DataService4
) {}
}
@组件()
类组件示例{
建造师(
私人后台:后台服务,
) {}
恩戈尼尼特(){
this.back.data1.getStuff();
}
}

您可以尝试使用mixin进行某种类型的多重扩展,但我建议改用composition:

@Injectable()
导出类后端服务{
建造师(
公共数据1:DataService1,
公共数据2:DataService2,
公共数据3:DataService3,
公共数据4:DataService4
) {}
}
@组件()
类组件示例{
建造师(
私人后台:后台服务,
) {}
恩戈尼尼特(){
this.back.data1.getStuff();
}
}

您可以将单个服务声明为许多其他服务的实现

@NgModule({
    ...
    providers: [
        { provide: DataService1, useClass: BackendService},
        { provide: DataService2, useClass: BackendService},
        ...
    ]
}

@Injectable()
export class BackendService implements DataService1, DataService2, ... { }
请注意我是如何使用
实现的
而不是
扩展的
。 因此,您的数据服务表现为接口。BackendService不会继承任何方法,您需要像编写Facade时那样编写所有方法


然后您可以开始逐步重构,实现DataService1等等。

您可以将您的单个服务声明为许多其他服务的实现

@NgModule({
    ...
    providers: [
        { provide: DataService1, useClass: BackendService},
        { provide: DataService2, useClass: BackendService},
        ...
    ]
}

@Injectable()
export class BackendService implements DataService1, DataService2, ... { }
请注意我是如何使用
实现的
而不是
扩展的
。 因此,您的数据服务表现为接口。BackendService不会继承任何方法,您需要像编写Facade时那样编写所有方法


然后您可以开始逐步重构,实现DataService1等等。

当然这是可能的(除非我误解了您)。您可以有一个服务类,并在其中添加许多服务方法。你的构造器只需要一件事..对不起,我不明白你说什么可以做。我不明白,为什么一个组件会依赖于所有这些服务,我认为你的组件的范围比它必须的要大,我强烈建议阅读是的,这是应用原子模型后的状态。尽管所有组件和模块都是细粒度的,但是将后端服务(有许多端点和要执行的函数)原子化将导致每个类别几乎有37个服务,每个组件平均有6到7个导入。我需要的是一种分离文件以便于维护的方法。当然这是可能的(除非我误解了你)。您可以有一个服务类,并在其中添加许多服务方法。你的构造器只需要一件事..对不起,我不明白你说什么可以做。我不明白,为什么一个组件会依赖于所有这些服务,我认为你的组件的范围比它必须的要大,我强烈建议阅读是的,这是应用原子模型后的状态。尽管所有组件和模块都是细粒度的,但是将后端服务(有许多端点和要执行的函数)原子化将导致每个类别几乎有37个服务,每个组件平均有6到7个导入。我需要的是一种分离文件的方法,以便于维护。这是一个很好的解决方案,因为这会强制使用显式语法,并允许一种名称空间。问题是这些服务何时需要共享某些资源,如对象或另一个实例。从这个答案我现在问:如果我在“main”服务中声明其他服务,如果重新创建main,它们是否会再次实例化?这取决于服务的提供方式,如果您在根模块中提供所有服务(应用模块),您将拥有每个服务的单个实例。这是一个很好的解决方案,因为这会强制使用显式语法,并允许一种名称空间。问题是这些服务何时需要共享某些资源,如对象或另一个实例。从这个答案我现在问:如果我在如果重新创建main,它们将再次实例化“main”服务?这取决于服务的提供方式,如果您在根模块(AppModule)中提供所有服务,您将拥有每个服务的单个实例。因此,我仍然需要在BackendService上实现所有方法?这是否会挫败后端服务模块化的目的?我的回答只会在您希望采取迭代(渐进)方法时对您有所帮助。首先,您需要