我想在我的应用程序中使用抽象级别,以避免服务之间的直接通信(使用业务逻辑)。
案例
我构建了一个 UI 模块,它将为所选记录生成一个记录列表和一个表单。 因此用户将能够浏览记录列表、添加新记录和编辑现有记录。
将从记录列表中调用表单(新建/编辑)。
概念如下。
问题
为了能够调用抽象服务和业务服务,我需要将它们相互实现。所以我得到一个“循环依赖”错误。
问题
建筑概念
代码示例
abstract.service.ts
@Injectable({
providedIn: 'root'
})
export class AbstractService
{
constructor
(
private Service1: Service1,
private Service2: Service2,
private Service3: Service3
)
callService1(): void
{
Service1.call();
}
callService2(): void
{
Service2.call();
}
callService3(): void
{
Service3.call();
}
}
Service1.service.ts
@Injectable({
providedIn: 'root'
})
export class Service1 {
constructor (
private AbstractService: AbstractService
)
ngOnInit() {
AbstractService.callService2();
AbstractService.callService3();
}
}
答案 0 :(得分:0)
不要那样做。
循环依赖总是很糟糕,即使它有时可以解决,最好避免它。
在您的情况下,适当的模式可能是使用存储在 AbstractService
中的“事件”(可观察对象),并且每个其他服务都可以选择推送事件和/或侦听它们。
虽然很难给出明确的答案,因为它可能是自以为是,而且您没有提供有关实际用例的详细信息。