你有一个面向拉的Observable / Listenable,它会在某些状态发生变化时通知观察者/听众。
该州包含多个数据块,而您的一些观察员/听众并不关心整个州。
您是否通常更愿意通知所有观察员/听众,并允许他们在没有任何关心的情况下忽略通知?
或者你通常更喜欢每个“数据块”的单独Observable,这样你的观察者/听众只能得到他们需要回复的通知吗?
是否取决于具体情况?
您对Observables / Listenables的粒度有什么一般的想法吗?
答案 0 :(得分:2)
您需要将维护成本与交付成本进行折衷。如果你有细粒度的事件定义,每个观察者只能获得他所需要的东西,所以你不需要为不感兴趣的观察者支付交付费用 - 但这样可以节省成本,因为每种新的块都需要添加到系统在某种程度上。
在交付成本相对较高的消息/子消息系统中(消息流经网络),人们通常需要特别注意主题定义。精心设计的主题层次结构通常很有用。所以我们得到像
这样的模式 sport
football
england
premier
champioship
scotland
spl
france
...
cricket
australia
...
india
sri lanka
因此允许各种级别的订阅。您可以订阅所有运动或(如某些人可能)直接
sport/football/england/championship/watford
答案 1 :(得分:1)
作为一般的经验法则,专门的界面比伤害更有益,所以我肯定会实现更多而不是更少。
这显然确实会引起这种情况。如果有必要,只能以这种方式专注,并且从你的情况来看似乎是这样,否则就像告知谷物制造商小麦需要收获一样。它根本不适用。
答案 2 :(得分:0)
如果我必须这样做,我可能会创建一个Observable类,它将为每种块提供一个事件,并为任何一个块提供一个全局事件。有点像中途。
答案 3 :(得分:0)
这不仅仅是维护。 Observables和Observers之间的接口越具体,它们就会越耦合。
“四人帮”这本书有一个部分针对这个问题,他们建议反对推模型和拉模型。拉模型可能效率低,推模型可能无法重复使用。
所以,这在很大程度上取决于具体情况。我倾向于略高于拉模型。