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

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

  •  
  •   qianyiyu98 · 201 天前 · 1105 次点击
    这是一个创建于 201 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    10 回复  |  直到 2019-03-28 17:13:08 +08:00
        1
    ai277014717   201 天前
    貌似不仅要一一对应 而且还要绑定
        2
    chinvo   201 天前 via iPhone
    基本上是这样的
        3
    qianyiyu98   201 天前
    @ai277014717 是指 view 持有 viewmodel 吗?
        4
    shyrock   201 天前
    那么 Vue 到底是不是 MVVM ?
        5
    ai277014717   201 天前
    @qianyiyu98 就是 vi 属性变化传递到 vm 和 m,m 属性变化也要传递到 vm 和 v
        6
    miaoxia   201 天前
    viewmodel 主要功能不仅仅是使 view 和 model 解耦,关键是业务要放到哪里。
    MVC、MVP 也可以解耦,MVC 业务放到 C 里,MVP 业务放到 P 里,MVVM 业务放到 VM 里
    区别就是 MVP 中 V 和 P 相互持有引用,需要在特定的时机调用各自的方法达到消息通信的目的,
    MVVM 是通过一个绑定机制,使得 V 和 VM 在不需要上层手动调用就可以达到通信的目的。
        7
    qianyiyu98   201 天前
    @miaoxia "MVVM 是通过一个绑定机制,使得 V 和 VM 在不需要上层手动调用就可以达到通信的目的",就是这点我一直没有搞清楚。不需要上层调用是指 V 和 VM 的通信不需要 C 的介入?如果是这样的话,V 持有一个 VM,那么 V 可以向 VM 通信,然后 VM 通过 block 反向传值通知 V,这样不也是一种自动的绑定机制吗?
        8
    miaoxia   201 天前
    @qianyiyu98 "不需要上层调用是指 V 和 VM 的通信不需要 C 的介入?" 这里木有 C 的角色哇
    "如果是这样的话,V 持有一个 VM,那么 V 可以向 VM 通信,然后 VM 通过 block 反向传值通知 V,这样不也是一种自动的绑定机制吗?"你描述的就是 MVP 的逻辑
    "自动绑定机制"是自动在不需要"反向传值"之类的操作。
    Vue 和 Android 里的 DateBinding 都有这样的"双向绑定流程",不过是把 V 和 M 做了绑定。
    你可以简单的理解成观察者的模式,V 和 M 在某一层已经做好了通信封装,你只需要按照某种格式做好关联,就免了 MVP 里面的手动调用。
        9
    qianyiyu98   201 天前
    好吧,我明白了。就是说在 MVP 中 V 是需要持有 P 的才能相互通信,而 MVVM 采用双向绑定不用持有也能通信。我感觉这种双向绑定的机制有点违背编程的思路啊…
        10
    miaoxia   201 天前
    @qianyiyu98
    把手动调用封装起来,通信方式配置化,解放程序员双手
    才可以做更多更有意(hua)义(shui)的事:P
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2637 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 00:40 · PVG 08:40 · LAX 17:40 · JFK 20:40
    ♥ Do have faith in what you're doing.