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的運行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章