抛开具体的平台,在设计 viewmodel 层的时候应该考虑具体的 view 需要的数据,而不是照搬后台传来的数据结构,这样的理解是否正确?
这样的话,model 就完全和后台传来的数据结构对应,viewmodel 和 view 所需的数据对应,viewmodel 的主要功能就是根据业务逻辑将后台数据转化成 view 能够完美消化的数据格式,使得 view 可以和 model 解耦。
1
ai277014717 2019-03-28 14:16:13 +08:00
貌似不仅要一一对应 而且还要绑定
|
2
chinvo 2019-03-28 14:21:29 +08:00 via iPhone
基本上是这样的
|
3
qianyiyu98 OP @ai277014717 是指 view 持有 viewmodel 吗?
|
4
shyrock 2019-03-28 14:43:22 +08:00
那么 Vue 到底是不是 MVVM ?
|
5
ai277014717 2019-03-28 15:57:25 +08:00
@qianyiyu98 就是 vi 属性变化传递到 vm 和 m,m 属性变化也要传递到 vm 和 v
|
6
miaoxia 2019-03-28 16:31:48 +08:00
viewmodel 主要功能不仅仅是使 view 和 model 解耦,关键是业务要放到哪里。
MVC、MVP 也可以解耦,MVC 业务放到 C 里,MVP 业务放到 P 里,MVVM 业务放到 VM 里 区别就是 MVP 中 V 和 P 相互持有引用,需要在特定的时机调用各自的方法达到消息通信的目的, MVVM 是通过一个绑定机制,使得 V 和 VM 在不需要上层手动调用就可以达到通信的目的。 |
7
qianyiyu98 OP @miaoxia "MVVM 是通过一个绑定机制,使得 V 和 VM 在不需要上层手动调用就可以达到通信的目的",就是这点我一直没有搞清楚。不需要上层调用是指 V 和 VM 的通信不需要 C 的介入?如果是这样的话,V 持有一个 VM,那么 V 可以向 VM 通信,然后 VM 通过 block 反向传值通知 V,这样不也是一种自动的绑定机制吗?
|
8
miaoxia 2019-03-28 16:48:07 +08:00
@qianyiyu98 "不需要上层调用是指 V 和 VM 的通信不需要 C 的介入?" 这里木有 C 的角色哇
"如果是这样的话,V 持有一个 VM,那么 V 可以向 VM 通信,然后 VM 通过 block 反向传值通知 V,这样不也是一种自动的绑定机制吗?"你描述的就是 MVP 的逻辑 "自动绑定机制"是自动在不需要"反向传值"之类的操作。 Vue 和 Android 里的 DateBinding 都有这样的"双向绑定流程",不过是把 V 和 M 做了绑定。 你可以简单的理解成观察者的模式,V 和 M 在某一层已经做好了通信封装,你只需要按照某种格式做好关联,就免了 MVP 里面的手动调用。 |
9
qianyiyu98 OP 好吧,我明白了。就是说在 MVP 中 V 是需要持有 P 的才能相互通信,而 MVVM 采用双向绑定不用持有也能通信。我感觉这种双向绑定的机制有点违背编程的思路啊…
|
10
miaoxia 2019-03-28 17:13:08 +08:00
|