当 Pub/Sub Messaging 消除了模块的接口时怎么办?
What do do when Pub/Sub Messaging eliminates a module's interface?
当我使用 Prism 的 EventAggregator 实现 "loosely-coupled" 消息传递方法时,我遇到了一个有趣的场景:class 没有 public 接口;它的所有输入和输出都是通过这些幕后 pub/sub 事件完成的。如果我要在另一个项目中重用此 class,我会查看 public 接口以了解它提供的功能及其依赖项。但在这种情况下,什么都没有(事件聚合器服务除外)。我将不得不查看 class 内部以查看它正在订阅哪些事件,以及它发布了哪些事件,以便了解它如何融入周围环境……否则它只是坐在那里什么也不做。
这是 pub/sub 模式的缺点——缺乏发现能力吗?
作为一个依赖,它没有正在监听的队列吗?那种定义它的接口。
接口隐藏了实现细节,这就是我们使用它们的原因,但同时它们在组件之间创建耦合。
Pub/Sub 模式试图消除耦合,因此您无法使用任何形式的接口。是的,这是一个缺点。
此外,在您的情况下,如果您想为 Pub/Sub 和其他使用接口的消费者重用逻辑,您可以提取接口的通用方法,然后从私有 Pub/Sub 侦听器中调用这些方法。
当我使用 Prism 的 EventAggregator 实现 "loosely-coupled" 消息传递方法时,我遇到了一个有趣的场景:class 没有 public 接口;它的所有输入和输出都是通过这些幕后 pub/sub 事件完成的。如果我要在另一个项目中重用此 class,我会查看 public 接口以了解它提供的功能及其依赖项。但在这种情况下,什么都没有(事件聚合器服务除外)。我将不得不查看 class 内部以查看它正在订阅哪些事件,以及它发布了哪些事件,以便了解它如何融入周围环境……否则它只是坐在那里什么也不做。
这是 pub/sub 模式的缺点——缺乏发现能力吗?
作为一个依赖,它没有正在监听的队列吗?那种定义它的接口。
接口隐藏了实现细节,这就是我们使用它们的原因,但同时它们在组件之间创建耦合。
Pub/Sub 模式试图消除耦合,因此您无法使用任何形式的接口。是的,这是一个缺点。
此外,在您的情况下,如果您想为 Pub/Sub 和其他使用接口的消费者重用逻辑,您可以提取接口的通用方法,然后从私有 Pub/Sub 侦听器中调用这些方法。