不知我对于 mvvm 模式的理解是否正确?

2019-03-28 13:44:12 +08:00
 qianyiyu98

抛开具体的平台,在设计 viewmodel 层的时候应该考虑具体的 view 需要的数据,而不是照搬后台传来的数据结构,这样的理解是否正确?

这样的话,model 就完全和后台传来的数据结构对应,viewmodel 和 view 所需的数据对应,viewmodel 的主要功能就是根据业务逻辑将后台数据转化成 view 能够完美消化的数据格式,使得 view 可以和 model 解耦。

2084 次点击
所在节点    程序员
10 条回复
ai277014717
2019-03-28 14:16:13 +08:00
貌似不仅要一一对应 而且还要绑定
chinvo
2019-03-28 14:21:29 +08:00
基本上是这样的
qianyiyu98
2019-03-28 14:24:32 +08:00
@ai277014717 是指 view 持有 viewmodel 吗?
shyrock
2019-03-28 14:43:22 +08:00
那么 Vue 到底是不是 MVVM ?
ai277014717
2019-03-28 15:57:25 +08:00
@qianyiyu98 就是 vi 属性变化传递到 vm 和 m,m 属性变化也要传递到 vm 和 v
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 在不需要上层手动调用就可以达到通信的目的。
qianyiyu98
2019-03-28 16:41:38 +08:00
@miaoxia "MVVM 是通过一个绑定机制,使得 V 和 VM 在不需要上层手动调用就可以达到通信的目的",就是这点我一直没有搞清楚。不需要上层调用是指 V 和 VM 的通信不需要 C 的介入?如果是这样的话,V 持有一个 VM,那么 V 可以向 VM 通信,然后 VM 通过 block 反向传值通知 V,这样不也是一种自动的绑定机制吗?
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 里面的手动调用。
qianyiyu98
2019-03-28 17:02:13 +08:00
好吧,我明白了。就是说在 MVP 中 V 是需要持有 P 的才能相互通信,而 MVVM 采用双向绑定不用持有也能通信。我感觉这种双向绑定的机制有点违背编程的思路啊…
miaoxia
2019-03-28 17:13:08 +08:00
@qianyiyu98
把手动调用封装起来,通信方式配置化,解放程序员双手
才可以做更多更有意(hua)义(shui)的事:P

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/549505

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX