不知我对于 mvvm 模式的理解是否正确? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
qianyiyu98
V2EX    程序员

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

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

    抛开具体的平台,在设计 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     Solana     5423 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 03:49 PVG 11:49 LAX 20:49 JFK 23:49
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86