iOS开发与设计模式 - MVC

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发与设计模式 - MVC相关的知识,希望对你有一定的参考价值。

iOS开发与设计模式 - MVC

 最近在学习GoF的设计模式这本书,粗略的浏览了一遍,真是好书。好书就应该好好读,因此很有必要从实际的言语、项目理解设计模式。
 我是做ios开发的,自然就从这方面入手(脑)。

MVC

iOS开发最基本的一个模式就是MVC, M指model,V指view,C指controller,有很多文章对它们是什么,它们的关系,它们如何交互进行了详细的说明,本文就不再展开说明了,仅放一张图供大家参考(来自斯坦福大学ios课程)

 

技术分享

 

 ViewController 是什么?

在iOS开发中,大量的使用ViewController,通常将其与具体的界面联系起来,并且把它当做 MVC 中controller的角色。

这常常造成ViewController的内容过多,稍微复杂一点的界面动则需要上千行的代码,难以管理。

其实这是没有理清楚ViewController的角色,因为最后一个单词是Controller而想当然地把它当做Controller了。

仔细分析一下:
首先,每个ViewController必定有一个View, 两者是绑定的,而且ViewController中有很多关于View生命周期的方法,比如didload,willappear,didappear等,
另外ViewController与界面对应,界面里有什么,viewcontroller就必须有什么,而且viewcontroller中常常有view层级的构建。


因此,在我看来可以将viewcontroller看作一个view,至少是一个特殊的view,这个view知道自己的生命周期,知道怎么转场(实际也是view的切换)。


这样一来, iOS中通常意义的 M-V-C 就变成了 M-VC, 那么真正的 C 呢 ?

再回过头来看,什么是MVC, 在设计模式这本书中,第一章引言中就对 MVC 进行了说明,以下是要点

1. MVC 分离了试图和模型,使之可以独立的变化
2. MVC 允许在不改变试图外观的情况下改变试图对用户输入的响应方式

第一点很好了解,第二点可以理解为 对用户输入的处理方式是可变的,实际上v的一部分角色就是对用户输入进行处理。

如果viewcontroller是v的话,由于viewcontroller和view是绑定的,很难去独立的变化viewcontroller(一个解决方法是viewcontroller中有大量的if,elseif 这样的语句), 这与MVC理念是相背离的:M V C这三部分应该都能独立的变化。(这也是不将viewcontroller看作controller的原因)


那么对于MVC这一模式,我们就缺少了 C , 可以独立变化的 C, 真正处理逻辑、控制的 C。如果业务发生变化,可以方便切换的C(这里又有Strategy模式的影子)。

这样,原本的iOS MVC 变成了 M-VC-C

它们的职责是:

1. M仍然是M;
2. VC 即 viewcontroller + view,负责界面的渲染,接受用户输入,并传递给 真正的 C 来处理,viewcontroller中不做任何业务逻辑的处理,主要管理view的显示和生命周期;
3. C 处理所有的业务逻辑

以上学习设计模式,关于MVC的一点心得。









































以上是关于iOS开发与设计模式 - MVC的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发之理解iOS中的MVC设计模式

iOS开发设计模式之MVC

除了 MVC,iOS 上还使用了哪些设计模式?

iOS 关于MVC和MVVM设计模式的那些事

iOS开发之浅谈MVVM的架构设计与团队协作

iOS中的MVC设计模式