小编典典

观察者、发布/订阅和数据绑定之间的区别

all

观察者模式
发布/订阅
数据绑定 有什么区别?

我开始相信数据绑定是一个通用术语,并且有不同的实现方式,例如观察者模式或发布/订阅模式。使用观察者模式,可观察者更新其观察者。使用
Pub/Sub,0-many 发布者可以发布某些类的消息,0-many 订阅者可以订阅某些类的消息。

还有其他实现“数据绑定”的模式吗?


阅读 127

收藏
2022-08-02

共1个答案

小编典典

以下是我对三者的看法:

数据绑定

从本质上讲,这只是意味着“对象 Y 上的属性 X 的值在语义上绑定到对象 B 上的属性 A 的值。没有假设 Y 如何知道或接受对象 B 上的更改。

观察者,或可观察者/观察者

一种设计模式,通过该设计模式,对象具有通知其他特定事件的能力 -
通常使用实际事件完成,这些事件有点像对象中具有特定功能/方法形状的插槽。可观察者是提供通知的人,观察者接收这些通知。在 .net 中,observable
可以公开一个事件,并且观察者使用“事件处理程序”形状的钩子订阅该事件。没有关于通知发生的具体机制,也没有关于一个 observable
可以通知的观察者的数量做出任何假设。

发布/订阅

Observable/Observer 模式的另一个名称(可能具有更多“广播”语义),这通常意味着更“动态”的风格 -
观察者可以订阅或取消订阅通知,一个可观察者可以向多个观察者“大喊”。在 .NET 中,可以为此使用标准事件,因为事件是 MulticastDelegate
的一种形式,因此可以支持将事件传递给多个订阅者,并且还支持取消订阅。Pub/Sub 在某些上下文中的含义略有不同,通常在 event 和 eventer
之间涉及更多的“匿名性”,这可以通过任意数量的抽象来促进,通常涉及一些知道一切的“中间人”(例如消息队列)各方,但个别各方不知道对方。

数据绑定,Redux

在许多“类似
MVC”的模式中,可观察对象公开了某种方式的“属性更改通知”,其中还包含有关更改的特定属性的信息。观察者是隐式的,通常由框架创建,并通过某种绑定语法订阅这些通知以明确标识对象和属性,并且“事件处理程序”只是将新值复制过来,可能会触发任何更新或刷新逻辑。

数据绑定重新 Redux

数据绑定的替代实现?好吧,这是一个愚蠢的:

  • 启动一个后台线程,不断检查对象的绑定属性。
  • 如果该线程检测到自上次检查后属性的值发生了变化,则将该值复制到绑定项。
2022-08-02