码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发与设计模式 - MVC

时间:2016-12-27 07:24:57      阅读:344      评论:0      收藏:1      [点我收藏+]

标签:变化   部分   dap   斯坦福   nbsp   构建   margin   第一章   响应   

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

标签:变化   部分   dap   斯坦福   nbsp   构建   margin   第一章   响应   

原文地址:http://www.cnblogs.com/beddup/p/6224385.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!