问题标签 [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 投票
1 回答
965 浏览

java - 如何为 web 应用程序创建客户端通知服务,或者我应该使用观察者模式?

我有一个完全实现的 DAO,我所有的 bean 都继承了一个 Entity 对象。现在,我想创建一个客户端通知系统,当用户在持久性存储中创建/更新/删除实体时,通知会自动通过电子邮件发送给客户端。

我有一个 DAO 管理器,它使用工厂模式根据实体类型向我返回一个 DAO 管理器。

每个管理器都有一个 create()、remove()、update() 方法....

我的第一个想法是让我的所有实体管理器都继承一个观察者接口,并在函数调用(创建、删除、更新等)之后发送通知。

这是一个明智的想法吗?如果没有,我该怎么做才能向客户发送通知?

我正在运行 JBoss 5 或 Tomcat 6(或两者都用于轻松部署)和 Apache Struts(尽管我不明白我提到它的原因)。

提前致谢。

0 投票
1 回答
64 浏览

.net - .NET 中的远程 Observables

我一直遇到这种情况,但除了本土解决方案之外从未找到任何解决方案:

  • 您查看订单列表
  • 当您对这些订单进行更改时,它们会在查看同一列表的任何其他客户端屏幕上动态更新,反之亦然

我称这个想法为“远程可观察对象”......不确定它是否有更好的名字。

您可能会争辩说这可以通过轮询或不断刷新您的浏览器页面来完成,但我已经看到了更好的方法(套接字、花哨的增量跟踪等)。

数以万计的框架让您可以将您的对象/数据暴露给远程客户端......但老实说,我无法说出您自动获得对该数据进行流式更改的任何地方。

我是否错过了一个惊人的秘密框架?坚持写我自己的?

0 投票
4 回答
362 浏览

ruby-on-rails - 在 Rails 中创建新模型实例时发送电子邮件的最佳方式是什么?

我有一个具有以下型号的应用程序:UserTaskAssignment。每个分配belongs_to一个用户和一个任务(或者换句话说,一个任务通过一个分配分配给一个用户)。

一旦用户完成了一项任务,该任务就会被标记为完成,并且应用程序会立即创建一个新任务(或者换句话说,将任务分配给其他人)。

创建此新作业后,我想立即向新受让人发送电子邮件。我知道我可以通过以下三种方式之一来做到这一点:

  1. 在我的控制器中明确发送电子邮件。
  2. 在分配模型的回调中发送电子邮件。
  3. 在 Assignment 模型上创建一个观察者并发送电子邮件after_create

人们认为哪些选项最好,为什么?#1 对我来说似乎很糟糕,因为我不想记住在每个可能完成作业的操作中发送它。我听过一些人说 Rails 观察者很糟糕,应该避免,但我不确定他们是否是我应该信任的人。还有其他意见吗?

0 投票
5 回答
2376 浏览

c# - 为什么观察者模式在 C# 中比在 Ruby 中复杂得多?

我在Russ Olsen 的“Ruby 中的设计模式”中阅读了 如何在 Ruby 中实现观察者模式。我注意到这种模式的 Ruby 实现比 C# 实现简单得多,例如Jesse Liberty 和 Alex Horovitz 在“Programming .NET 3.5”中展示的实现。

因此,我使用“Ruby 中的设计模式”算法重写了“Programming .NET 3.5”观察者模式示例(pdf 版的第 251 页),两种实现的源代码都可以从上述网站下载。

下面是重写的例子,告诉我你怎么看?
我们真的需要使用事件和委托来使用 C# 中的观察者模式吗?


更新 阅读评论后,我想问这个问题:
除了使代码更短之外,还有其他理由使用委托和事件吗?而且我不谈论 GUI 编程。

Update2 我终于明白了,委托只是一个函数指针,事件是委托的更安全版本,它只允许两个操作 += 和 -=。

我对“Programming .NET 3.5”示例的重写:

这里提到了Ruby代码:

这是我重写的“Programming .NET 3.5”示例:

0 投票
7 回答
26704 浏览

c++ - C++中的观察者设计模式

观察者设计模式是否已经在 STL 中定义(如 Java 中的 java.util.Observer 和 java.util.Observable)?

0 投票
3 回答
1102 浏览

design-patterns - 使用 java.util.Observer 跟踪类中的静态方法调用

我是初学者程序员,想知道如何解决这个问题。我要解决的问题是使用 java.util.Observer 在我的程序中记录静态方法调用。

显然,我原来的帖子一定只是让人们感到困惑,所以我将把它留得更开放:任何人都可以建议一种方法来保持静态方法计数在扩展 Observable 的类上吗?

感谢您的关注

0 投票
1 回答
652 浏览

ruby-on-rails - 尝试使用观察者和 STI 时出现 TypeError

我正在尝试遵循实现成就系统的线程(位于如何在 RoR 中实现成就系统),并且在保存对象并授予方法时遇到 TypeError?被调用。错误看起来像:

模型逻辑与上一个问题中的定义完全相同:

知道这里发生了什么吗?

更新: 根据下面的信息,我最终删除了抽象并将奖励方法直接放在每个控制器中。不是很干,当我有时间更多地使用它时,我会尝试再次将它抽象出来,但现在可以了。一个例子:

0 投票
1 回答
1361 浏览

ruby-on-rails - Ruby on Rails 自定义观察者

谁能建议如何在 Ruby on Rails 中使用自定义观察者或事件/回调?

我已经尝试过这两个帖子:

http://www.mutuallyhuman.com/2009/1/6/using-custom-activerecord-events-callbacks 和 http://alexkira.blogspot.com/2008/10/custom-observer-callbacks-in-rails。 html

似乎没有一个工作。在第二篇文章中,我将 Alex Kira 的 CallbackObservable 模块放在 lib/callback_observable.rb 中,这是放置它的正确位置吗?

非常感谢任何反馈。

0 投票
4 回答
17006 浏览

ruby-on-rails - 如何在 Rails 中为每个表创建完整的审计日志?

我们最近开始在我们的公司推动合规性,并且需要保留对当前在 Rails 应用程序中管理的数据的完整更改历史记录。我们已经被允许简单地将每个操作的描述性内容推送到日志文件中,这是一种相当不引人注目的方式。

我的倾向是做这样的事情ApplicationController

然后创建一个看起来像这样的观察者:

总的来说,这很好用,但是在使用<association>_ids附加到 has_many :through => 关联的“魔术”方法时会失败。

例如:

这将最终触发关联after_createRunway记录的时间,但不会触发删除before_destroya的时间。RunwayModel

我的问题是......有没有办法让它工作,以便它观察这些变化(和/或可能的其他删除)?
是否有更好的解决方案仍然相对不引人注目?

0 投票
2 回答
346 浏览

zend-framework - 原型中的“点击”观察者

我有一个包含多个 div 的页面(每个都有一个唯一的 ID 和相同的类,'父')。在每个“父” div 下方,是一个具有“子”类和唯一 ID 名称 -child 的 div。此 DIV 在页面加载时为空。

每当您单击父 DIV 时,都会执行以下代码。

当然,一个子节点有可能再次成为它自己的父节点。响应如下所示(Smarty with Zend Framework):

每当我单击加载在孩子内部的“父” div 时,什么都不会发生:( 任何建议/修复如何解决这个问题?