在实现中使用数据库时,观察者模式和发布-订阅模式是不是相同?
Posted
技术标签:
【中文标题】在实现中使用数据库时,观察者模式和发布-订阅模式是不是相同?【英文标题】:Is Observer pattern and pub-sub same when a database is used in the implementation?在实现中使用数据库时,观察者模式和发布-订阅模式是否相同? 【发布时间】:2017-12-12 07:13:44 【问题描述】:我试图理解观察者模式并停留在一个特定点。据我了解,一旦观察者订阅通知他们任何事件更改,订阅就会存储在某处,然后当事件更改时通知订阅者。
在实际场景中,出于持久性原因,我应该将值存储在数据库或文件中,并在事件发生时通过从 db 获取并遍历列表来通知它们。
这是正确的理解吗?我没有看到任何涉及数据库的示例,但每个示例都使用列表。
同样,发布者/订阅者模式也类似,不同之处在于不知道发布者和订阅者是谁的确切信息,并且使用 MQ 等中间技术或某种中间技术来建立两者之间的通信。
我的问题是:当我们在观察者模式中使用数据库时,它不会成为发布者/订阅者(除了这里有观察者和发布者的知识)。理解正确吗?
【问题讨论】:
【参考方案1】:在大多数观察者模式示例中,您会看到使用列表,但该列表的初始化方式取决于您的应用程序。例如,具有大量订阅者的应用程序出于持久性原因必须存储这些订阅者,就像您的情况一样。我们不能指望如此大量的订阅者一直在记忆中。因此,观察者列表仅从 DB 初始化,尽管并非一次性完成所有条目。这是完全不同的讨论。
其次,仅通过使用 DB,观察者模式和 pub-sub 模式不会变得相似。即使使用 DB,您也只是在初始化要通知的观察者列表。中间没有经纪人可以保持主题的身份并使观察者对主题类隐藏。这是一篇很好的文章,很好地解释了它: https://hackernoon.com/observer-vs-pub-sub-pattern-50d3b27f838c
【讨论】:
以上是关于在实现中使用数据库时,观察者模式和发布-订阅模式是不是相同?的主要内容,如果未能解决你的问题,请参考以下文章