Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 如果发布/订阅消息消除了模块';用户界面?_Design Patterns_Architecture_Publish Subscribe_Eventaggregator - Fatal编程技术网

Design patterns 如果发布/订阅消息消除了模块';用户界面?

Design patterns 如果发布/订阅消息消除了模块';用户界面?,design-patterns,architecture,publish-subscribe,eventaggregator,Design Patterns,Architecture,Publish Subscribe,Eventaggregator,当我使用Prism的EventAggregator实现“松散耦合”的消息传递方法时,我遇到了一个有趣的场景:一个没有公共接口的类;它的所有输入和输出都是通过这些幕后发布/订阅事件完成的。如果我要在另一个项目中重用这个类,我会查看公共接口,看看它提供了什么功能及其依赖关系。但在本例中,没有任何内容(除了事件聚合器服务)。我必须查看课堂内部,看看它订阅了哪些活动,发布了哪些活动,才能知道它如何适应周围的环境。。。否则它就坐在那里什么也不做 这是发布/订阅模式的一个缺点吗?缺少发现功能?作为一个依赖项

当我使用Prism的EventAggregator实现“松散耦合”的消息传递方法时,我遇到了一个有趣的场景:一个没有公共接口的类;它的所有输入和输出都是通过这些幕后发布/订阅事件完成的。如果我要在另一个项目中重用这个类,我会查看公共接口,看看它提供了什么功能及其依赖关系。但在本例中,没有任何内容(除了事件聚合器服务)。我必须查看课堂内部,看看它订阅了哪些活动,发布了哪些活动,才能知道它如何适应周围的环境。。。否则它就坐在那里什么也不做


这是发布/订阅模式的一个缺点吗?缺少发现功能?

作为一个依赖项,它没有正在侦听的队列吗?这种类型定义了它的接口。

接口隐藏了实现细节,这就是为什么我们使用它们,但同时它们在组件之间创建了耦合

发布/订阅模式试图消除耦合,因此无法使用任何形式的接口。是的,这是一个缺点


另外,在您的情况下,如果您希望使用接口为发布/订阅和其他使用者重用逻辑,您可以提取通用方法到接口,然后从私有发布/订阅侦听器调用这些方法

不知道你所说的排队是什么意思;我不使用队列您提到的“消除耦合”。因此,我所讨论的类不再严格依赖于发布者。但从某种意义上说,它仍然是这样的:它依赖于某些东西来发布适当的事件,否则它将只是坐在那里,什么也不做。如果我把这样一个松散耦合的对象放到一个新项目中,而忽略了让其他东西发布正确的事件,我会挠头,“为什么这个对象没有做任何事情?”是的,不幸的是,在这种情况下,我不知道任何完美的解决方案。好的文档和评论将是您最好的朋友:)