Angular:循环依赖(抽象服务)

时间:2021-07-28 05:30:43

标签: angular

我想在我的应用程序中使用抽象级别,以避免服务之间的直接通信(使用业务逻辑)。

案例

我构建了一个 UI 模块,它将为所选记录生成一个记录列表和一个表单。 因此用户将能够浏览记录列表、添加新记录和编辑现有记录。

将从记录列表中调用表单(新建/编辑)。

概念如下。

enter image description here

问题

为了能够调用抽象服务和业务服务,我需要将它们相互实现。所以我得到一个“循环依赖”错误。

问题

  • 组织和调用服务的最佳做法是什么? 抽象层?

建筑概念

enter image description here

代码示例

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();
    }
}

1 个答案:

答案 0 :(得分:0)

不要那样做。

循环依赖总是很糟糕,即使它有时可以解决,最好避免它。

在您的情况下,适当的模式可能是使用存储在 AbstractService 中的“事件”(可观察对象),并且每个其他服务都可以选择推送事件和/或侦听它们。

虽然很难给出明确的答案,因为它可能是自以为是,而且您没有提供有关实际用例的详细信息。