DMQ / mvvm

剖析vue实现原理,自己动手实现mvvm

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

为什么不用中介者模式(发布/订阅模式)实现,而是用观察者模式?

ziyi2 opened this issue · comments

commented

我这里用中介者模式实现了一下,不知道有没有什么利弊可以说明一下?
https://github.com/ziyi2/mvvm

commented

个人觉得观察者模式和中介者模式都没有问题,不能说哪个好哪个不好,使用观察者模式,会使整体看起来每个模块的关联性更强,而中介者模式看起来逻辑会更解耦,但是不太易找到Watcher和Observer之前的关系。
中介者模式,订阅某个消息的时候,一般是通过sub某个key,当data数据较复杂,层级较深的时候,这个key可能需要变的很复杂,而且容易出现key冲突情况,需要对key进行一些类似命名空间的保护,不如观察者模式直接简单

commented

key冲突的问题我是通过拼接key值实现的,比如一个对象 let a = { key1: { key2: { key3: '111'}}}, 那我就会sub('a')、sub('a.key1')、sub('a.key1.key2')、sub('a.key1.key2.key3'),但是如果a这个对象被重写了,那我就需要取消旧属性的订阅操作。不知道这样实现可以么