问题标签 [observer-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
12812 浏览

ruby-on-rails - 您将如何在 Ruby on Rails 应用程序中使用 rSpec 测试观察者?

假设你的一个 Ruby on Rails 应用程序中有一个 ActiveRecord::Observer - 你如何使用 rSpec 测试这个观察者?

0 投票
2 回答
4476 浏览

multithreading - 多线程观察者的设计模式

在数字信号采集系统中,数据通常由一个线程推送到系统中的观察者中。

来自Wikipedia/Observer_pattern的示例:

例如,当来自例如 GUI 线程的用户操作要求数据停止流动时,您希望中​​断主体与观察者的连接,甚至一起处置观察者。

有人可能会争辩说:您应该停止数据源,并等待一个哨兵值来处理连接。但这会在系统中产生更多的延迟。

当然,如果数据泵线程刚刚询问了观察者的地址,它可能会发现它正在向被破坏的对象发送消息。

是否有人创建了一个“官方”设计模式来应对这种情况?他们不应该吗?

0 投票
6 回答
3800 浏览

php - php 观察者模式在会话超时时注销用户

当用户的会话超时发生时,我正在尝试注销用户。注销用户 - 在我的情况下 - 需要修改用户在数据库中的“在线”状态。
我在想我也许可以使用观察者模式来制作一些东西来监视用户会话的状态并在会话到期时触发回调——这将保留用户的名称,以便我们可以更新数据库。我不确定在会话方面从哪里开始。我可以将回调绑定到会话的超时吗?

这些东西是否内置在任何可用的 pear 或 zend 会话包中?我会用我必须做的一切来实现这一点!



UPDATE @ 16:33:
如果您有一个用户可以相互交互的系统(但他们只能与在线用户交互)怎么办?用户需要知道当前还有哪些其他用户在线。

如果我们只是在每次页面刷新时检查会话是否仍处于活动状态,那么在超时后,用户将被发送到未登录的页面,但他们仍然在系统中列为在线。

这种方法很好,只是当我们超时会话时,我们会丢失有关可用于注销用户的用户信息。



更新@16:56:
对。谢谢。我同意……有点丑陋。我已经对服务器进行了一些缓慢的轮询,因此实现该方法非常容易。对于会话处理包来说,这似乎是一个非常有用的功能。Zend 和 PEAR 都有会话包。

0 投票
2 回答
2114 浏览

.net - 使用 WCF MSMQ 的观察者模式

MSMQ 携带的消息是否可以有多个侦听器?

WCF 似乎在服务方面构建了一切,使通信成为点对点事务。我想使用消息队列来缓冲另一个进程的传入流量,该进程在数据库中记录日志。

可能有任何数量的其他进程对监视传入流量感兴趣,这肯定需要观察者模式,但我看不出如何表达观察者模式,至少不通过 WCF 使用 MSMQ。

谁能给我建议?


关于我为什么关心的一些背景,这也可能有助于说明问题:我有一个 Windows 服务,它接受来自现场小黑盒的连接请求。它设置套接字,黑匣子发送描述事件的消息,并在时间和空间上用 GPS 位置进行注释。

我从套接字流中解析消息包,并通过 MSMQ 将它们发送到另一个过滤重复数据包并将数据包写入数据库表的进程。

任何数量的后处理都将受益于响应传入流量的增量计算,并且用户工具也会执行用户通知以响应传入流量。

所以,我真的很想让一个进程发送消息,而几个进程接收它们。其中一个接收器负责解析数据包内容并将消息转录到数据库中;这显然是最终从队列中删除消息的责任的候选者,但问题是如何确保这是处理消息的最后一个处理程序。

0 投票
2 回答
754 浏览

c# - 基于类型的 C# 观察者?

假设我想根据类型创建一组观察者。也就是说,当他们被通知一个事件时,他们被告知其中一个参数的类型,然后根据它是否可以对该类型进行操作来决定是否采取行动。

有什么简单的方法可以做到这一点吗?我认为这对泛型来说相当简单,但这似乎比我想象的要难。如果可以避免的话,我宁愿不必处理对对象的一堆引用。

我陷入困境的地方是这样做:

当然,我也可以将 Subject 设为通用,但是我必须为每种类型设置一个单独的 Subject。有人在这里有什么建议吗?是否有一些我在某处遗漏的功能,或者我是否过于复杂?

更新:我确实过度简化了 Notify 和 NotifyDelegate 采用的论点。而不是这个:

我实际上想做这样的事情:

我基本上试图来回传递的是来自数据库的数据。抱歉,如果前面的代码示例让任何人感到困惑。

0 投票
3 回答
8295 浏览

winforms - MVC 与观察者模式

我最近在 StackoverFlow 上问了一个关于 MVC 的问题:可以在桌面应用程序开发中使用 MVC 设计模式/架构模式吗?

根据提供的答案,我开始研究如何在 Windows 窗体应用程序中实现这一点。我遇到了以下 CodeProject 文章: http: //www.codeproject.com/KB/cs/model_view_controller.aspx

在文章下方的评论中,某些用户认为(尽管这是一篇好文章)它实际上是观察者模式。首先,但不太重要的问题是,是否有人同意或不同意这一点,为什么?

关于第二个也是更重要的问题:我正在尝试在 .NET 中构建一个小型任务列表程序。它会非常小,希望很快。一般来说,对于这样的项目,什么是更好的架构?观察者模式还是 MVC 模式?还是另一种模式?

谢谢

0 投票
1 回答
795 浏览

ruby-on-rails - Rails:如何观察实际上没有模型的连接记录?

是否可以使用 Observer 来观察 JOIN 记录的创建?例如,您有一个拥有_and_belongs_to_many Book Models 的用户模型。是否可以在创建或删除 books_users 记录时对其进行监控,或者我必须有一个 BookUser 模型来执行此操作?

我想观察的例子:

或者

管他呢!

谢谢,

戴夫·K。

0 投票
3 回答
325 浏览

javascript - 将表单连接到 Javascript 对象(和其他最佳实践建议)

多年来,我一直在使用 javascript 在网站上执行轻量级功能 - DOM 操作等 - 但现在我开始研究使用它来完成更多繁重的工作(与 PHP 组合)。我才刚刚开始接触 OO JS,而且我仍在努力了解与它配合良好的最佳实践和设计模式。

更具体地说 - 我的问题是,这里有人可以建议将表单连接到 javascript 对象的技术吗?

在我当前的实现中,我有一个可以通过(相当大的)表单编辑的 JS 对象。当我实例化对象时,我将一个 onchange 观察者附加到表单,其回调将表单字段与对象参数同步。我正在处理通过 AJAX 提交的表单 - 还有一个定期请求,它将表单信息的临时版本保存到 mySQL DB。我想知道的一件事是是否可以轻松地处理另一个方向的同步-表单字段更新的对象的onchange(例如在表单重置时)。

我很想知道这种方法是否正确/明智,更一般地说,我很想听听有关 OOJS 表单处理的建议。

提前干杯:)

(我使用原型顺便说一句)

0 投票
3 回答
3252 浏览

c# - MVC 和观察者模式

我在我的项目中实现观察者模式时遇到问题。该项目必须在 C# 中制作为 MVC,就像 Windows 应用程序一样。
在我的域模型中,我有例如 Country 类和 Country 存储库。我有一个国家控制器和视图,用于查看所有国家(表格上的列表)、添加新国家和编辑现有国家。
我不知道有多少观点必须了解与国家变化相关的变化。问题是我必须使用观察者模式。在网络上,我只能找到主题是国家和观察者是编辑国家的表单并且所有示例都在控制台应用程序中的示例。

我需要所有包含国家/地区列表的表格都知道添加新国家/地区,而不仅仅是编辑现有国家/地区。我应该怎么做,我应该将存储库设为主题吗?

0 投票
2 回答
1504 浏览

php - 数据映射器 + 观察者模式

我正在用 PHP 构建一个应用程序,并且我正在使用数据映射器模式进行数据库访问。我正在考虑使用观察者模式让我的所有映射器观察他们创建的实体,以便他们可以自动将任何更改保存回数据库,而无需我手动解析它们。

我只是想知道这是一个好主意,还是不好的做法等?

我通常使用一些在层次结构中链接在一起的对象,目前必须手动将每个对象解析到它的映射器,这相当乏味,所以只是想提出一个更好的解决方案。

谢谢,杰克