• 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的一点心得。





  • 相关阅读:
    2020软件工程作业01
    2020软件工程个人作业06——软件工程实践总结作业
    2020软件工程作业05
    2020软件工程作业04
    2020软件工程作业03
    2020软件工程02




  • 原文地址:https://www.cnblogs.com/beddup/p/6224385.html
Copyright © 2020-2023  润新知