【问题标题】:Avoiding circular dependencies with AngularJS Mediator pattern使用 AngularJS 中介者模式避免循环依赖
【发布时间】:2013-12-18 18:25:35
【问题描述】:

我有两个服务和一个中介。如果我希望中介者调用并被两个服务调用,我认为我需要使它们相互依赖。这会导致循环依赖错误。

Person 依赖于Mediator 调用Mediator 方法

Mediator 依赖于Person 调用Person 方法

是使用事件或承诺的唯一解决方案吗?我是否正确实施了这种模式?

【问题讨论】:

  • 你能展示一些你的代码吗
  • 为什么需要中介依赖其他服务?你不能让你的服务依赖于中介,并且一旦在中介内初始化注册回调或类似的东西?很难在不确切知道您想要做什么的情况下说出来。

标签: angularjs design-patterns mediator


【解决方案1】:

这是一个超出 Angular 和 javascript 恕我直言的问题。

构造中介以避免循环依赖的标准方法是使用接口,但 javascript 没有接口。

在您的情况下,如果您将中介注入到服务中,反之亦然,是的,会出现错误。

假设您的中介器也是一项服务,解决方法是不要将依赖项注入中介器,而是在将中介器与您需要它进行中介的 2 个服务一起使用之前对其进行初始化。

替代方法是不使用中介对象,而是使用发布者/订阅者模式,该模式内置于 Angular 中,带有 $broadcast 和 $on。恕我直言,这提供了比中介者模式更松散的耦合,所以我竖起大拇指

【讨论】:

  • 什么是“在将中介器用于您需要中介的 2 个服务之前对其进行初始化”是什么意思?有机会演示一些代码吗?
  • @poshest OP 尝试将 2 Person 对象注入到调解器中,但由于循环依赖而无法正常工作。解决方法是使用类似函数 initMediator(person1, person2) 的方法来初始化中介器,其中 2 个对象在它们之间进行中介。
  • @Anton,请编辑您的答案以适应“但在使用之前初始化调解器”的实现。请看我的问题:stackoverflow.com/questions/37889533/…
【解决方案2】:

只有使用 Mediator 的服务才应该依赖于 Mediator。发布事件的服务会注入 Mediator。订阅事件的服务会注入 Mediator 并注册服务中包含的回调。中介者不应该依赖任何一个服务,它应该只包含将发布事件映射到回调引用列表。

查看我写的 Angular 中的中介者示例 here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 2011-11-13
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    相关资源
    最近更新 更多