我的目标的基本思想是:
- 用户A通过表单向
submit.php
提交值 - 用户B监视提交的值,该值通过
updates.php
推送的服务器发送事件进行更新
submit.php
处理将新值写入数据库,以及通知updates.php
中的观察者对象。
混淆点:
-
updates.php
的每个实例(会话)是否都需要自己的观察者,因为每个查看更新的用户都将运行自己的脚本实例,或者他们是否都可以共享同一个全局观察者对象? -
当Subject对象加载时,它将在哪里获得观察者对象?我不能储存/让观察者入睡,因为他们是活跃的,对吧?
-
如果我使用ObjectStorage对象,当
submit.php
被调用并获取它时,它们实际上是观察者对象吗? -
每次提交表单时,我如何从
submit.php
存储/检索ObjectStorage对象?显然我不能使用会话,对吧?就像每个用户一样?
简短版本:有没有一种方法可以获得一个全局的、持久的对象,其中包含主体侧的观察者,而观察者是活动对象?
如果这个想法有更好或更简单的方法(或者如果我只是完全困惑,需要教育),请告诉我。但我并不是在寻找一个已经可以做到这一切的框架,因为我正试图利用这个项目来更好地理解观察者模式。
在解释之前需要记住的一个重要注意事项:
设计模式是为解决特定语言相关问题(限制)而创建的解决方案。它们不是语言级别的软件体系结构中的设计经验法则。
我不确定你如何看到观察者模式,但我会尽力帮助你:
-
没有。会话在您的案例中意味着用户实例。您应该以某种方式使用单个抽象观察器来处理所有更新实例。全局观察者对象是前进的道路;
-
是的,它们是活动对象,因为观察者向主体注册。在某个时刻,你将不得不拦截他们;
-
每当主题发生变化时,它都会向所有注册的观察者广播它已经发生了变化,每个观察者都会向主题查询它负责监控的主题状态的子集。我想你可以从中了解到这一点;
-
这实际上是关于实现设计的。没有具体的方法。你可以试着看看什么更适合你;
基本上,是的,你可以有一个全局Observer对象,但这并不是模式的真正意义。
试着阅读Observer模式的实现,看看这是否对你有帮助。
我建议您调查socket.io.