V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qianyiyu98
V2EX  ›  程序员

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

  •  
  •   qianyiyu98 · 2019-03-28 13:44:12 +08:00 · 2269 次点击
    这是一个创建于 2071 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    10 条回复    2019-03-28 17:13:08 +08:00
    ai277014717
        1
    ai277014717  
       2019-03-28 14:16:13 +08:00
    貌似不仅要一一对应 而且还要绑定
    chinvo
        2
    chinvo  
       2019-03-28 14:21:29 +08:00 via iPhone
    基本上是这样的
    qianyiyu98
        3
    qianyiyu98  
    OP
       2019-03-28 14:24:32 +08:00
    @ai277014717 是指 view 持有 viewmodel 吗?
    shyrock
        4
    shyrock  
       2019-03-28 14:43:22 +08:00
    那么 Vue 到底是不是 MVVM ?
    ai277014717
        5
    ai277014717  
       2019-03-28 15:57:25 +08:00
    @qianyiyu98 就是 vi 属性变化传递到 vm 和 m,m 属性变化也要传递到 vm 和 v
    miaoxia
        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 在不需要上层手动调用就可以达到通信的目的。
    qianyiyu98
        7
    qianyiyu98  
    OP
       2019-03-28 16:41:38 +08:00
    @miaoxia "MVVM 是通过一个绑定机制,使得 V 和 VM 在不需要上层手动调用就可以达到通信的目的",就是这点我一直没有搞清楚。不需要上层调用是指 V 和 VM 的通信不需要 C 的介入?如果是这样的话,V 持有一个 VM,那么 V 可以向 VM 通信,然后 VM 通过 block 反向传值通知 V,这样不也是一种自动的绑定机制吗?
    miaoxia
        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 里面的手动调用。
    qianyiyu98
        9
    qianyiyu98  
    OP
       2019-03-28 17:02:13 +08:00
    好吧,我明白了。就是说在 MVP 中 V 是需要持有 P 的才能相互通信,而 MVVM 采用双向绑定不用持有也能通信。我感觉这种双向绑定的机制有点违背编程的思路啊…
    miaoxia
        10
    miaoxia  
       2019-03-28 17:13:08 +08:00
    @qianyiyu98
    把手动调用封装起来,通信方式配置化,解放程序员双手
    才可以做更多更有意(hua)义(shui)的事:P
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3009 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 14:45 · PVG 22:45 · LAX 06:45 · JFK 09:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.