4

假设我有以下组件:

在此处输入图像描述

  • 生产者产生数字并向消费者发送消息
  • Producer 和 Consumer 都向 Monitor 发送消息
  • 监视器,随机说,决定生产/消费过程何时停止并向 Stopper 发送消息
  • Stopper 然后干净地停止生产者和消费者

我知道这在 Java 等可变语言中很容易实现。我也知道这可以通过允许接口的部分可变性来解决,例如这里描述的。

但是,即使可能,具有循环依赖关系也不是一个好习惯。所以,让我们假设所有引用都是构造函数注入的并且是最终的:

  • 生产者有final Consumerfinal Monitor
  • 消费者有final Monitor
  • 显示器有final Stopper
  • 塞子有final Producerfinal Consumer

我找到了这样的参考资料但它们似乎并不适用。

一般而言,如何取消循环这种情况以及诸如此类的情况?换句话说,我最感兴趣的是如何从设计的角度完成不形成循环。有什么提示吗?

4

1 回答 1

2

你是对的,如果所有依赖项都是最终的并通过构造函数注入,这将不起作用。

但是请问,为什么一定要通过构造函数注入呢?setters一天结束时用来连接豆子并没有错。

实际上,在 Spring 中,bean 通常是先实例化,然后再注入。所以你可以看看这种方法。

除此之外,您可以查看一种不同的方法来建模您的问题(没有循环依赖关系)。

例如,既然您已经在使用队列在生产者和消费者之间发送消息,为什么不也将队列上的消息发送到监视器呢?停止器还可以向生产者和消费者发送消息。

或者,正如 Taylor 所建议的,一个 ESB。

可能有许多其他的设计方法,阅读(例如)Apache Camel Enterprise Integration Patterns以获得一些想法。

于 2015-06-18T23:08:27.950 回答