1

我的目标的基本思想是:

  1. 用户 A 通过表单提交一个值到submit.php
  2. 用户 B 监控提交的值,这些值通过 Server-Sent Event 更新,从 推送updates.php

submit.php处理将新值写入数据库,以及通知updates.php.

混淆点:

  1. 每个实例(会话)是否updates.php需要自己的观察者,因为每个查看更新的用户都将运行他们自己的脚本实例,或者他们都可以共享同一个全局观察者对象吗?

  2. 当主题对象加载时,它将从哪里获取观察者对象?我不能存储/让观察者睡觉,因为他们很活跃,对吧?

  3. 如果我使用 ObjectStorage 对象,当submit.php被调用并获取它时,它们是否是观察者对象实际上观察者对象,我的意思是调用他们的更新方法实际上会更新用户的列表?

  4. submit.php每次提交表单时如何存储/检索 ObjectStorage 对象?显然我不能使用会话,对吧?因为那些将是每个用户?

简短版本:有没有办法在观察者是活动对象的主体端获取包含观察者的全局持久对象?

如果有更好或更简单的方法来实现这个想法(或者如果我完全困惑并需要教育),请告诉我。但我并不是在寻找一个已经可以做到这一切的框架,因为我正在尝试使用这个项目来更好地理解观察者模式作为一个想法。

4

2 回答 2

1

在解释之前要记住的重要说明:

设计模式是为解决特定语言相关问题(限制)而创建的解决方案。它们不是语言级别的软件架构中的设计经验法则。

我不确定您如何查看观察者模式,但无论如何我都会尽力帮助您:

  1. 不,您的情况下的会话意味着用户实例。您应该以某种方式使用将处理所有更新实例的单个抽象观察者。全局观察者对象是要走的路;

  2. 是的,它们是活动对象,因为观察者向主题注册了自己。在某些时候,您将不得不拦截它们;

  3. 每当 Subject 发生变化时,它都会向所有已注册的 Observer 广播它已更改的信息,并且每个 Observer 都会向 Subject 查询它负责监视的 Subject 状态的子集。我想您可以从中弄清楚;

  4. 这真的是关于实现设计。没有特定的方法可以做到这一点。你可以试试看什么更适合你;

基本上,是的,您可以拥有一个全局 Observer 对象,但这并不是该模式的真正重点。

尝试阅读观察者模式的实现,看看是否对你有帮助。

于 2012-03-28T18:54:18.553 回答
0

我建议您调查socket.io

于 2012-03-28T20:29:40.933 回答