MVC模式解析 一、引子 二、什么是MVC

一、引子

        在苹果眼中的MVC文章中,苹果从理论、历史等角度讲述了MVC这种其广泛使用的模式。但是这些讲解偏向于理论化,对于想要快速了解MVC的读者来说,其作用有些小。其更加适用于具有较丰富的经验,对MVC也有自己的理解的读者。
        本文在苹果官方文档得基础之上,对实际开发中的某些代码如何划分归属进行了说明。

二、什么是MVC

        MVC是一个具有三个主要对象的软件设计模式(虽然这种模式没有被收入《设计模式》这本书之中)。

  • Model:存储App、模块等数据的地方;包含持久化、模型对象、解析器(解析网络数据)、管理器、网络请求代码等内容。
  • View:是用于展示App的“面孔”;这些类一版是可以重用的、一般不包含任何特定业务知识。
  • Controller:使用代理模式在View、Model层中实现的中介者;控制器一般不了解具体的View类型,其通过抽象协议来与View进行交流;像UITableView这种视图,控制器使用UITableViewDataSource、UITableViewDelegate与其进行交流。

2.1、Model层

        除了存储数据,Model层也会包含其他一些内容:

  • 网络代码:从网络获取数据的代码
  • 持久化代码:当把数据保存到数据库、设备等处的持久化代码
  • 解析代码:把网络数据解析为本地Model的代码
  • 管理器和其他抽象层/类:一些无处可安放的代码;一些“管理器”代码、一些胶合代码
  • 数据源和代理:大部分情况下,控制器充当View的数据源和代理;但是在某些情况下Model层也会承担数据源和代理的职责
  • 常量:一些用于代表格式化字符串、通知等的常量
  • helper和扩展:一些类的扩展、工具代码
            以上列举了惯常的Model层可以包含的代码,但不是说只能这样;可以根据具体场景进行变化。

2.2 View层

        当用户与你的App进行交互的时候,他们是在于View层进行交互;View层不应该含有任何的业务逻辑。在View层你会经常看到如下的一些内容。

  • UIView的子类
  • UIKit/AppKit的类
  • Core Animation
  • Core Graphics
            当我们使用View层时可能发现各种问题,不过典型的问题时View层包含不属于View的内容,可以使用以下的检查列表来检查存在哪些问题。
  • 是否与Model有关
  • 是否含有业务逻辑
  • 是否与非UI的内容相关
            优秀的View一般都是可重用的,但是不要在一开始就想着要设计可重用的View,当发现具有重用的必要性时再考虑重用。

2.3 Controller层

        控制器层是应用程序中最不可重用的部分,因为它通常涉及特定于领域的规则。 在你的应用程序中有意义的内容并不总是在其他人的应用程序中有意义。 然后控制器将使用模型层中的所有元素来定义应用程序中的信息流。通常来说,这一层的类具有以下作用:

  • 首先应该访问什么,网络还是持久化数据?
  • 应该以什么频率刷新App
  • 下一个屏幕应该显示什么
  • 应用程序进入后台后,app应该做什么
  • 用户操作UI之后,App应该作何反应
            顾名思义,控制器作为App的大脑,控制着整个App的运行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章