MVVM

一、前言


现在网上一抓一大把都是MVVM讲解,但是demo大部分都是MVVM+RAC的,较少有用oc现有的如block,delegate等来充当胶水作用的demo。本文附上MVVM+block的demo来讲解MVVM的原理。

源来:

因为MVC严重困扰开发者的问题:

厚重的ViewController

遗失的网络逻辑(没有属于它的位置)

较差的可测试性

所以出现了新的架构MVVM

二、什么是MVVM


概念:(如图)

MVVM结构图

简单的说就是在MVC的基础上,把C拆出 个ViewModel专负责数据和相关逻辑处理的东西,就是MVVM。

各个的作用:

1.view作用:控制视图的UI。通过viewModel控制它的显示,点击它的控件通过viewModel刷新model。(由于用block,中间需要vc的胶水作用)

2.viewController的作用:充当viewModel和view的胶水作用。

3.viewModel的作用:处理相关逻辑(业务,视图显示)和网络请求,桥接model和view,viewController的作用。

4.model的作用:存储数据。通过viewModel刷新view的显示,view点击事件通过viewModel刷新自己。(由于用block,中间需要vc的胶水作用)

进一步阐述:

姑且将view和viewController看成view

1.在MVVM中,view不能直接引用model,而是通过引用viewModel来间接引用model,反过来也是不能。

2.view可以引用viewModel ----- (viewModel也可以引用view如loading,最好不要,确保viewModel只处理逻辑和网络相关,这样耦合度更低,也方便测试)

3.viewModel可以引用model,反过来最好不要(保持mvvm纯粹的结构)

4.viewModel里面应该放些什么样的东西呢?一般viewModel中放置相关逻辑(业务,视图显示)及网络请求

充当胶带作用有(demo仅仅使用block):

ReactiveCocoa(RAC),KVO,Notification,block,delegate和target-action

优点:

方便测试:通常来说,要进行,界面测试比较困难,而MVVM可以对viewModel进行测试(还没搞过,有时间搞下下)

方便业务的复用:例如把一些视图逻辑放在一个ViewModel里面,让很多view/ViewController进行重用

方便对职责进行划分:例如可以让一些人专门开发UI,一些人专门开发逻辑

代码更加优雅,增加可维护性,耦合度降低

缺点:

造成大量胶水代码:当页面的交互逻辑非常多时,需要频繁的在V/VC-VM-M来回传递信息。(所以大家都用RAC就是因为这个原因,能相对减少些胶水代码)

代码写起来会更费劲一点

三、MVVM实例

1.目录结构如下:

目录

view:

view

viewController:

控制器头文件
控制器初始化
控制器刷新相关

viewModel:

viewModel

Model:

Model

四、总结:

写这边文章主要是通过一个简单的demo让不太懂RAC的人先了解下MVVM的基本思想,这里主要是我对MVVM思想的理解,如果有什么其他想法的,欢迎各位大神不吝赐教,共同进步!大家有什么疑惑我们可以在评论区交流!

接下来要干嘛

1.写篇MVVM +RAC的文章

2.对viewModel模块进行相关的单元测试(听说很好用)

五、Demo

代码地址:github.com/lsj731965675/MVVMTest

本文由简书作者原创编写,转载请保留版权网址,感谢您的理解与分享!

参考资料:

iOS MVVM+RAC 从框架到实战

ReactiveCocoa 和 MVVM 入门

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容