认识MVVM

来源:互联网 发布:网络男歌手到不了 编辑:程序博客网 时间:2024/05/21 20:30
  • 说到MVVM,就必须先说MVC,众所周知,MVC就是Model显示数据,View呈现用户界面Controller调节二者之间的交互,但是这个结构存在的问题就是模型的代码太少,而随着功能的增加控制器的代码会越来越多,而且不方便测试(比如办一个饭卡,默认是一百元)
  • 在MVVM中,view和view controller正式联系在一起,我们将它视为一个组件,这两个都不能直接引用model,而是一用视图模型view model,里面放置着用户输入验证逻辑,视图显示逻辑,发送网络请求等代码,view model再去引用model
  • 这个优点,首先就是低耦合,view可以独立于model变化和修改,一个viewModel可以绑定到不同的view上,可重用性,也有利于独立开发,开发人员可以专注业务逻辑和数据的开发,设计人员可以专注于页面设计
  • 实际用例
    -楼市餐厅需要冲餐卡,默认是100元,在模型层中,如果想保存这个值–>let balance = 100
    -但是展示给用户的时候,我们想呈现出”您的账户余额为:¥100”,在mvc中,这种代码只能放到试图控制器中,显得很臃肿,如果放在模型中,会更丑,因为有许多进行格式化的代码挤在其中
    -如果添加视图模型,仅仅需要映射一下原始数据
struct AccountViewModel {let dispalyBalance: Stringinit(mode: cardAccount) {  let formattedBalance = model.balance.currencyValue;  displayBalance = "Your balance is \(formatterBalance)"}}

-通过这种方式,视图模型实际上会读取数据模型,然后将其中的信息进行格式化,从而准备展现在视图当中,从而准备展现的视图当中,很容易测试,直接把带有账户信息的模型放进去,然后测试显示就可以了,在之前是特别复杂的

  • 去年WWDC上,Andy(ISO4.1-8的UIKit框架爱维护者)演讲中有一个关于zoetrope(西洋镜)的例子
    • 大概意思就是每一帧都是静态值,可以通过改变任务手部抬起的距离,或者任务头部倾斜的距离,来对字符进行编码.每一帧都是静态的,但是当把他们放在一起,然后一直看向一个中心的话,那么始终都有新的数据出现,这样就可以得到一个美丽的,生动的动图
    • 我们可以使用相同的方式来实现值类型,视图控制器会跟随zoetrope的最后一个帧图像–也就是最新的一块活跃数据,然后将其展示个用户.只要您的模型放生了更新,视图就会根据最新的信息进行更改了 (帧动画原理)
var viewModel = ViewModel(model:Account)
0 0
原创粉丝点击