今天是開工第一天,首先呢,先祝廣大的簡友新春快樂!這也是公司版本迭代的空閑期間,沒事的時候可以看(chui)看(chui)簡(niu)書(b).
下面就來說下項目架構(gòu)的理解,以下都是自己的理解,還請各路大神高抬貴手,畢竟和氣生財,新年開工第一天,請讓我以后寫簡書更有激情.
在iOS開發(fā)中,多數(shù)的項目都是傳統(tǒng)的MVC模式,在我看來不管是什么結(jié)構(gòu)的項目,都是由MVC衍生而來的.比如MVVM,MVP,和組件化開發(fā),本文我們主要還是說下關(guān)于MVC吧!畢竟現(xiàn)在我們的項目還是MVC結(jié)構(gòu)的,只是對于整體結(jié)構(gòu)進(jìn)行了進(jìn)一步的修改,修改后的結(jié)構(gòu)有點類似于MVP.下面廢話少說,直接看圖
在這個架構(gòu)中,我把每一個模塊都會建立一個ViewController,Controller,Model,Network.
ViewController : 繼承于UIViewController就是我們MVC架構(gòu)中的C,但是在這里雖然它繼承與UIViewController,但是我們把它看做是一個視圖類,相當(dāng)于View.
Controller: 是控制層,繼承于NSObject.是一個單利類.把controller看做是控制器,所有的邏輯層,網(wǎng)絡(luò)請求和跳轉(zhuǎn)頁面都放到這里.
Model: model還是那個model,大家熟悉的model.(但是c已經(jīng)不是那個c了)
Network: 會英文的童鞋都應(yīng)該知道,這肯定是網(wǎng)絡(luò)請求,把每個模塊的網(wǎng)絡(luò)請求都單獨寫到這里面.
這時候有的童鞋就會問,剛剛那個controller里面不就有網(wǎng)絡(luò)請求嗎,為什么又會多出來一個network呢?!
這個network的作用就是把所有的網(wǎng)絡(luò)請求的參數(shù)都用一個方法傳到這個類里面,然后在controller里面調(diào)用這個network類中的方法,在controller里面就能夠獲取到網(wǎng)絡(luò)層返回的數(shù)據(jù)了.如圖:
這就可以說明為什么把網(wǎng)絡(luò)請求再次區(qū)分一個類了吧!
controller是控制層,里面除了有網(wǎng)絡(luò)請求,數(shù)據(jù)處理還會有關(guān)于跳轉(zhuǎn)到某個頁面的方法,如上圖 screen_shot_03@2x.png.
這么做的主要原因就是:由于現(xiàn)在的項目的邏輯,需要跳轉(zhuǎn)到同一個控制器的地方比較多,在傳統(tǒng)的MVC架構(gòu)中,每當(dāng)我們從不同的控制器跳轉(zhuǎn)到同一個控制器的時候,都會寫一些重復(fù)的代碼,但是如果我們一旦進(jìn)行修改的時候我們就會發(fā)現(xiàn),需要修改的地方太多了,代碼的復(fù)用性特別低.如果我們采取這個方法,當(dāng)我們在A,C,D不同的控制器中跳轉(zhuǎn)到B控制器的時候,我們只需要調(diào)用B所在的Module的Controller中的push到B的方法即可,這樣我們便提高了代碼的復(fù)用性和可維護(hù)性.
大家覺得相比于MVC,這種對MVC的優(yōu)化怎么樣呢?
其實看完之后,我覺得大家的第一個反應(yīng)就是,單利啊!單利會始終存在于app的生命周期中啊!會造成內(nèi)存消耗啊!為什么不把每個Controller都當(dāng)成每個控制器的一個變量呢?
個人覺得如果單利中沒有過多的成員變量等,那么就不會造成太大的內(nèi)存消耗.所以大家可以放心大膽的試試.
最后附上demo地址: https://github.com/Chris-Gaptain/CCStructDemo
好了,就到這里吧!喜歡的童鞋就贊下吧!不喜歡的童鞋只需要您的微微一笑!
希望大家能對我自己的理解給出寶貴意見(勿噴)