好了,我作大死的连续第五天奋斗在电脑跟前了,好的。
昨天聊了网络层的封装,今天聊聊开发模式,架构师应该干的事情。我一个编程界的新手也想聊聊,昨天说了要做高素质的流氓。今儿只是聊聊我对MVC和MVVM的感受和想法,具体的概述看我第一篇介绍。因为打字的时候就不会乱七八糟的想一些事情了。
再次强调。今天只聊思想,概述,国庆结束之前一定上代码,纯干货。保证你能上手简单的MVVM。
开始今天的话题。
首先聊聊Model
为什么先聊Model,因为不论是MVC还是MVVM。都有一个是统一的,那就是Model。
还是那句话,全聊我自己的思考和看法。和专业的解释有差距还轻喷。
之前也说过我对Model的理解,今天重新聊聊什么是Model。我觉得做后台的同学可以更好的理解Model。Model就是一系列和数据库有关的东西,对数据的操作等等。
那么在iOS里呢。
在任何一个App里都会有数据获取的地方。在iOS里就是Model层。
后台给我们传输数据的时候传输的都是json数据,那么我们必须要将json转model。这也是大公司面试喜欢问的,怎么json转Model。
说到这,必须要说个东西。对象。
json转换成Model,其实就是将json转换成一个对象。然后对这个对象进行操作。我们得到Model之后就可以用"."操作符来对Model里的属性进行操作了。
json转Model之后,我们的Model层里就有了数据。
所以说,很多情况下,我们称为Model为模型,前段时间上软件工程这门课,老师好像是说叫数据层,我觉得这个称呼非常的合理。
我们常说解析json解析json,类比后台的建表,我们的Model实际上就是把建表变成了json的映射而已。
当然,如果只把Model层解释为json数据的解析,肯定是有问题的。当我们从本地数据库取数据的时候,还是需要用Model来解析,这基本上和后台就更像了,但是不同的是,我们把本地数据库里的数据取出来之后,在此转换为一个对象。然后去使用。
最后来总结一下Model。Model层可以没有吗,当然不能,因为无论是后台开发还是App,Model层是一切数据的来源。数据来了才能有一个完成的App。但实际上来说,我们调用Model层的语句可能很少。最主要代码还是集中在VC或者是VVM。
聊聊MVC的弊端
为什么不直接聊MVC,因为MVC是大众开发iOS的模式。无论是后台还是iOS,虽然说iOS的MVC和后台的有差别,但是还是没啥好说的。是个iOS开发都知道MVC。在此也不做过多的阐述。
直接聊聊iOS中MVC的弊端。实际上可以说只聊聊VC。
我只写过一点点Rails。先来说说我对Rails的MVC的看法,再和iOS的MVC一比较,立马就看出弊端了。
Rails的MVC
在rails中,C是对于View中的方法进行描述。举个最简单的例子,我们在View中需要实现index,列出所有文章的列表。那么就在C中写index函数的定义就好了。不用在View里写任何东西。
而View,就是你所看到的html网页。只需要加上简单的触发动作等等就ok。
好了,到这大概能明白View和C的关系了。
下面来说说iOS中的MVC
iOS的MVC
MVC,实际上的为的就是让各个层次负责不同的任务。那么View,Controller应该分开。
但是在iOS中,我们的View视图和Controller是在一起的!我们只能通过对View的抽象来调用,但是免不了在Controller里写下大量的View代码。
这就是问题了。
之前的一篇博客也聊过这个问题。
所以针对Controller和View分不开的问题,根据WF的架构方式,提出了MVVM。
那么,今天的半干货部分。自此开始。
MVVM到底在做什么
想了一下,与其废话半天说MVVM和MVC不如直接解释MVVM每部分到底在干嘛,这样一说,立马就知道MVVM的好处了。
在MVC中,占据我们很大代码量的是什么。一是大量的View视图,二是大量的网络请求,三是部分逻辑。
而在MVVM中,我们的ViewModel层干啥,一是做网络请求,二是逻辑的实现
我不贴图了,我觉得看了那么多文章都不如直接说每部分是干什么的这样直接了当。
所以综合比较一下。下面MVC分别用M1,V1,C1来表示,MVVM用M2,V2,VM2来表示,看看发生了什么变化。
M1->M2 没变化
C1->V2 以后iOS中的ViewController即是今天的View。少了网络请求和逻辑处理部分,只对View进行操作
V1->V2 对于我个人来说,以后我会再单独抽象一个View在MVVM中来处理Common的View还有需要封装的View。
C1->VM2 这里VM2,只进行逻辑和网络请求等等。
那么,在MVVM中最重要的是什么?是数据的绑定。
具体可以看WF的架构。
我们采用RAC是为了将MVVM中的三个部分的数据进行绑定,一旦某个部分的数据有改变,那么绑定的另一个界面的数据就会改变。
好的,其实真正关键的没多少话,都标记了。这些大概明白,后面进行起来就快了。
这我会在后面的博客开始叙述的。
写在后面
这系列的博客想干什么。
对最近学习MVVM的一个总结。
MVVM困惑了我快一年了,我想采用这种新的开发模式来开发了。
我想用最通俗的语言,一个学生党的语言来更快的让你上手MVVM。
让创萌工作室以后的iOS开发可以更快的学习iOS开发。
我会一点点的来解释ViewModel层在干什么。这是第一篇博客,理论部分已经普及差不多了。
下一部分,我们开始利用RAC来分离业务逻辑的代码。后面的文章每篇文章会上代码上demo,也不写多内容,每次一点点,多写几篇博客。
我相信我写完你看完,我们都能征服MVVM!