- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是我目前挂断的一般设计问题。它导致了一些心理代码块......如果它只是一个常见的陷阱,我不想继续这样,但如果它被接受使用,我想继续,因为代码非常干净并且解耦(除了横切消息)。
我在代码中有一个基于列表的发布者/订阅者模式,我使用它允许任意代码部分发送未知订阅者可以收听的消息。非常坦率的。
我目前使用此模式的一个用例是启动一个 UI 状态指示器,向用户显示应用程序正忙。工作开始前有消息,进度有重复消息,完成有消息。看起来很干净,较低级别的代码只发布消息而不关心听众。
起始消息最初驱动 UI;它在主窗体的状态栏中显示一个字幕进度条。完成消息隐藏了这个进度条。更新消息在标签中表示为文本。
当时我没有意识到,我让 UI 依赖于这些消息的顺序。 UI 依赖于开始和完成消息才能正确反射(reflect) UI。我所指的“有状态”是在订阅者端(消息本身不保留任何状态)。
这种用法是否违反发布/订阅模式?如果是这样,问题是对消息顺序的依赖吗?如果没有,那很好,我可以继续:-)
最佳答案
在您的示例中,sequential coupling代码气味可能来自您的订阅者对发布者的内部运作了解太多(即,当一个开始时,另一个开始)。
您可以通过减少消息中的信息或让订阅者不利用消息的时间序列来降低耦合度。
例如,让订阅者对开始和进行中的消息执行相同的例程,将消息的分辨率降低为“WORKING”。如果需要,UI 订阅者可以生成对话框,或者如果它已经存在则更新它。管理对话框的生命周期是 UI 订阅者的工作,而不是应用程序的。
但是,这种细微的气味可能不足以开始混淆应用程序和 UI 订阅者之间的消息。
或者,您可以让订阅者足够健壮,无论调用的消息顺序如何,都能做正确的事。开始,开始,处理,结束,处理,开始,等等。订阅者的责任应该是管理进度对话框......无论应用程序发出什么疯狂的消息,都要尽力而为。
关于c# - 发布者/订阅者的使用陷入有状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9296119/
我想使用 Java 实现各种发布者/订阅者模式,但目前没有想法。 有 1 个发布者和 N 个订阅者,发布者发布对象,然后每个订阅者需要按照正确的顺序处理每个对象一次且仅一次。发布者和每个订阅者在自己的
我正在学习发布者/订阅者模式,并做了一个简单的例子来更好地理解它。 var Publisher = { subscribers: {}, Subscribe: functi
这是我目前挂断的一般设计问题。它导致了一些心理代码块......如果它只是一个常见的陷阱,我不想继续这样,但如果它被接受使用,我想继续,因为代码非常干净并且解耦(除了横切消息)。 我在代码中有一个基于
当我打开安装程序(使用NSIS创建)时,会出现UAC对话框,其中包含有关安装程序的信息。字段发布者为“未知”。我听说过对应用程序进行数字签名,您知道如何在NSIS中执行此操作吗? 如何将字段/属性发布
我正在使用具有 DefaultMessageListenerContainer 的 pub/sub 模型。我已将并发消费者配置为 5 个。如何唯一标识每个消费者? 我试图将相应监听器处理的每个事件存储
我想创建一个可以从不同线程调用的 RabbitMQ 发布者。 根据 RabbitMQ 最佳实践,我不应允许在不同线程中使用同一 channel ,因此在发布者的多个实例中共享此 channel 将导致
是否可以仅通过使用事件(即不是列表或字典)在 WCF 中实现发布者/订阅者模型? 如果是,请向我提供示例应用程序的网络链接,或任何讨论此问题的文章。 最佳答案 是的。 Here是一篇关于它的 MSDN
我使用 rosjava 作为订阅者和 rospy 作为发布者实现了发布/订阅。但是,我没有收到 rospy 的任何消息。我在这里错过了什么吗? JAVA 订阅者(假设 IP 为:1.1.1.1) pu
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在尝试签署一个小程序,这样发布者就不会显示为“未知”: 我为一个组织工作,我们有我们自己的证书颁发机构,证书链如下:ORG Root CA > ORG Trusted Certification
这是对我尝试使用 combine 实现的目标的过度简化。 如果发生某些事情,我需要向共享发布者注入(inject)一个值。 在这里您可以看到,如果 map 接收到数字 2,我使用原始发布者上的发送命令
我们有以下使用 .NET RabbitMQ 库的场景: 工作线程从队列中获取“请求”消息,并将它们分派(dispatch)到多个工作线程上进行处理。完成后,每个工作线程都会发送另一条消息。 我的问题是
当我将一些 Objective-C 代码移植到 Swift 时,我试图更好地理解新的 Combine 框架以及我如何使用它来重新创建一个通用的设计模式。 在这种情况下,设计模式是单个对象(管理器、服务
我有一个基本的 ZeroMQ 场景,由两个发布者和一个订阅者组成。在我决定将局域网内不同计算机上的所有进程分开之前,这在本地计算机上一直运行良好。这就是我创建 ZeroMQ 套接字的方式(简化的 Py
我目前正在尝试使用 0MQ 创建代理。我想订阅一个不在 0MQ 下运行的发布者。我的意思是我有发送 XML 文件的远程发布者的地址和端口,我想获取该文件。不幸的是,我没有收到发布者的任何消息,但它发送
我尝试使用 C++ 在 ZeroMQ 中开发发布者订阅者模型,我从 JSON 文件中提取对象值并将其发送到另一端。 我的订户部分运行良好,但出现任何错误。但是我在发布者部分面临以下错误:(在 if 语
我问过 Google 并搜索过 NServiceBus 网站和论坛,但我似乎找不到任何关于如何编写 Java 应用程序来订阅发布者的说明性指导。有没有人有任何这样的联系或经验? 最佳答案 这种情况并没
有谁知道如何使用 CruiseControl.Net 发布到 FTP 服务器? 最佳答案 我认为没有特定的方法可以做到这一点。您当然可以始终在 cruise control.net 的窗口中运行命令行
我正在尝试使用Ocelot在ASP.Net API网关中使用JWT承载身份验证,以与多个授权机构/发行者一起工作。一个颁发者是Auth0,另一个是基于IdentityServer4的内部身份验证服务器
如何删除 Visual Studio Marketplace 发布者? 在 https://marketplace.visualstudio.com/manage/publishers/ 上查看我的帐
我是一名优秀的程序员,十分优秀!