iOS開發框架MVVM 1理解開發模式

testHs發表於2015-10-05

好了,我作大死的連續第五天奮鬥在電腦跟前了,好的。

接著上次寫的iOS開發框架MVVM 1理解開發模式(佔坑,未寫完)來繼續聊聊我們的MVVM。

昨天聊了網路層的封裝,今天聊聊開發模式,架構師應該乾的事情。我一個程式設計界的新手也想聊聊,昨天說了要做高素質的流氓。今兒只是聊聊我對MVC和MVVM的感受和想法,具體的概述看我第一篇介紹。因為打字的時候就不會亂七八糟的想一些事情了。

再次強調。今天只聊思想,概述,國慶結束之前一定上程式碼,純乾貨。保證你能上手簡單的MVVM。

開始今天的話題。

首先聊聊Model

為什麼先聊Model,因為不論是MVC還是MVVM。都有一個是統一的,那就是Model。

還是那句話,全聊我自己的思考和看法。和專業的解釋有差距還輕噴。

之前也說過我對Model的理解,今天重新聊聊什麼是Model。我覺得做後臺的同學可以更好的理解Model。Model就是一系列和資料庫有關的東西,對資料的操作等等。

那麼在iOS裡呢。

在任何一個App裡都會有資料獲取的地方。在iOS裡就是Model層。

後臺給我們傳輸資料的時候傳輸的都是json資料,那麼我們必須要將json轉model。這也是大公司面試喜歡問的,怎麼json轉Model。

說到這,必須要說個東西。物件。

json轉換成Model,其實就是將json轉換成一個物件。然後對這個物件進行操作。我們得到Model之後就可以用”.”操作符來對Model裡的屬性進行操作了。

json轉Model之後,我們的Model層裡就有了資料。

所以說,很多情況下,我們稱為Model為模型,前段時間上軟體工程這門課,老師好像是說叫資料層,我覺得這個稱呼非常的合理。

我們常說解析json解析json,類比後臺的建表,我們的Model實際上就是把建表變成了json的對映而已。

當然,如果只把Model層解釋為json資料的解析,肯定是有問題的。當我們從本地資料庫取資料的時候,還是需要用Model來解析,這基本上和後臺就更像了,但是不同的是,我們把本地資料庫裡的資料取出來之後,在此轉換為一個物件。然後去使用。

最後來總結一下Model。Model層可以沒有嗎,當然不能,因為無論是後臺開發還是App,Model層是一切資料的來源。資料來了才能有一個完成的App。但實際上來說,我們呼叫Model層的語句可能很少。最主要程式碼還是集中在VC或者是VVM。

聊聊MVC的弊端

為什麼不直接聊MVC,因為MVC是大眾開發iOS的模式。無論是後臺還是iOS,雖然說iOS的MVC和後臺的有差別,但是還是沒啥好說的。是個iOS開發都知道MVC。在此也不做過多的闡述。

直接聊聊iOS中MVC的弊端。實際上可以說只聊聊VC。

我只寫過一點點Rails。先來說說我對Rails的MVC的看法,再和iOS的MVC一比較,立馬就看出弊端了。

Rails的MVC

在rails中,C是對於View中的方法進行描述。舉個最簡單的例子,我們在View中需要實現index,列出所有文章的列表。那麼就在C中寫index函式的定義就好了。不用在View裡寫任何東西。

而View,就是你所看到的html網頁。只需要加上簡單的觸發動作等等就ok。

好了,到這大概能明白View和C的關係了。

下面來說說iOS中的MVC

iOS的MVC

MVC,實際上的為的就是讓各個層次負責不同的任務。那麼View,Controller應該分開。

但是在iOS中,我們的View檢視和Controller是在一起的!我們只能通過對View的抽象來呼叫,但是免不了在Controller裡寫下大量的View程式碼。

這就是問題了。

之前的一篇部落格也聊過這個問題。

所以針對Controller和View分不開的問題,根據WF的架構方式,提出了MVVM。

那麼,今天的半乾貨部分。自此開始。

MVVM到底在做什麼

想了一下,與其廢話半天說MVVM和MVC不如直接解釋MVVM每部分到底在幹嘛,這樣一說,立馬就知道MVVM的好處了。

在MVC中,佔據我們很大程式碼量的是什麼。一是大量的View檢視,二是大量的網路請求,三是部分邏輯。

而在MVVM中,我們的ViewModel層幹啥,一是做網路請求,二是邏輯的實現

我不貼圖了,我覺得看了那麼多文章都不如直接說每部分是幹什麼的這樣直接了當。

所以綜合比較一下。下面MVC分別用M1,V1,C1來表示,MVVM用M2,V2,VM2來表示,看看發生了什麼變化。

M1->M2 沒變化

C1->V2 以後iOS中的ViewController即是今天的View。少了網路請求和邏輯處理部分,只對View進行操作

V1->V2 對於我個人來說,以後我會再單獨抽象一個View在MVVM中來處理Common的View還有需要封裝的View。

C1->VM2 這裡VM2,只進行邏輯和網路請求等等。

那麼,在MVVM中最重要的是什麼?是資料的繫結。

具體可以看WF的架構。

我們採用RAC是為了將MVVM中的三個部分的資料進行繫結,一旦某個部分的資料有改變,那麼繫結的另一個介面的資料就會改變。

好的,其實真正關鍵的沒多少話,都標記了。這些大概明白,後面進行起來就快了。

這我會在後面的部落格開始敘述的。

寫在後面

這系列的部落格想幹什麼。

  1. 對最近學習MVVM的一個總結。

  2. MVVM困惑了我快一年了,我想採用這種新的開發模式來開發了。

  3. 我想用最通俗的語言,一個學生黨的語言來更快的讓你上手MVVM。

  4. 讓創萌工作室以後的iOS開發可以更快的學習iOS開發。

我會一點點的來解釋ViewModel層在幹什麼。這是第一篇部落格,理論部分已經普及差不多了。

下一部分,我們開始利用RAC來分離業務邏輯的程式碼。後面的文章每篇文章會上程式碼上demo,也不寫多內容,每次一點點,多寫幾篇部落格。

我相信我寫完你看完,我們都能征服MVVM!

相關文章