V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhangchioulin
V2EX  ›  问与答

iOS 中使用 MVVM,复杂的 Cell 的 ViewModel 应该如何去写?

  •  
  •   zhangchioulin · 2017-05-24 01:17:55 +08:00 · 1219 次点击
    这是一个创建于 2556 天前的主题,其中的信息可能已经有所发展或是发生改变。

    关于 iOS 中 MVVM 架构的一个问题

    项目中 tableView 的 cell 比较复杂,于是我就把这个 cell 的展现形式拆分成: header + cell + footer 这样来展示。 cell 里面有多个 item 类似京东的购物车。

    下面的图片使用三种颜色来区分一个完成的 cell 所展示的区域。

    界面

    我碰到的问题是: cell 的 viewModel 应该采用一下的哪种方式去写。

    我尝试了下面的两种形式来写

    1. ViewModel 包含 headerViewModelArray + cellViewModelArray + footerViewModelArray。

      这 3 个 viewModel 的数组分别表示对应一个 cell 中 3 个 view 所用到的 ViewModel。 viewModel 包含 headerArray + cellArray + footerArray

    2. 在 ViewModel 中把header + cell + footer需要展示的元素写在一块

    需要在header + cell + footer展示的元素写在一块

    所以问题就来了: 如果我使用 1. 的方法来创建 viewModel 就会造成取 cell 的内容不方便,因为 cell 展示的是商品,商品可能有多个不太好一一对应。然后我使用2.的方式来创建 ViewModel,可是 MVVM 建议view-model 的内容尽量压缩到我们需要的范围。当我对 footer 赋值的过程中,cell 对应的属性其实是我不需要的,这样不太符合 MVVM 的建议。

    我认为1.不太靠谱,所以我使用了2.

    我想请各位给我点关于这种界面使用 MVVM 的建议。

    3 条回复    2017-05-24 10:17:39 +08:00
    timelessg
        1
    timelessg  
       2017-05-24 09:42:03 +08:00 via Android
    两个方向,使用 rac 的话建议参考美团 mvvm 技术架构,使用总线 vm-分线 vm。不使用响应式框架,可以每次都遍历 cellvm 或者写通知
    yiios
        2
    yiios  
       2017-05-24 09:46:15 +08:00
    我写过购物车 没有用 footerModel 和 headrModel 头尾的数据都靠遍历对应组的 cellModel 来生成的
    free9fw
        3
    free9fw  
       2017-05-24 10:17:39 +08:00
    把第一种改成用 NSDictionary 就可以了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2782 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:31 · PVG 21:31 · LAX 06:31 · JFK 09:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.