現(xiàn)在越來(lái)越多的人在開始使用MVVM這種開發(fā)模式。但是我想用MVC的人可能更多。當(dāng)然這兩種各有各的好處,在這里我也不說(shuō)誰(shuí)好誰(shuí)不好了。MVC 和MVVC是什么我就不在這里贅述了。如果新手不懂可以百度下。我想用MVC而不用MVVM的一大部分人就是覺(jué)得多一個(gè)ViewModel找來(lái)找去挺麻煩的,而MVC和MVVM本質(zhì)上區(qū)別就是把數(shù)據(jù)處理的部分全部抽出來(lái)做成一個(gè)ViewModel,通過(guò)類方法直接調(diào)用。而View和Controller同樣都是指自定義的View和視圖控制器ViewController。用MVVM可以是自己的代碼更簡(jiǎn)潔以及更有層次感。
那么就來(lái)說(shuō)說(shuō)如何用MVC讓我們的代碼同樣變得又層次感。
一、給ViewController劃分模塊
如下圖,我給ViewController六個(gè)模塊。當(dāng)然大家也可以按照自己的邏輯給劃分下模塊,我寫的僅僅是根據(jù)自己的使用習(xí)慣來(lái)分類的。我簡(jiǎn)單的跟大家說(shuō)下我的劃分邏輯。因?yàn)閂C最重要是是界面,一般是有了界面才進(jìn)行數(shù)據(jù)操作的,所以我把UI相關(guān)的東西分類了在第一個(gè)模塊,而有了UI后就應(yīng)該進(jìn)行數(shù)據(jù)裝載,當(dāng)界面存在了,數(shù)據(jù)也有了我們就可以進(jìn)行交互了,比如:按鈕的點(diǎn)擊事件、手勢(shì)…… 4、5、6就沒(méi)什么順序可言了。

然后我們?cè)跁鴮懘a的時(shí)候按照自己的分類在指定的Pragma下進(jìn)行代碼書寫。
1. - UI界面相關(guān)
UIView之類相關(guān)View的初始化,我個(gè)人比較喜歡對(duì)View用懶加載的形勢(shì)寫下來(lái)。

2.InitData VC數(shù)據(jù)的初始化
比如TableView的數(shù)據(jù)源網(wǎng)絡(luò)請(qǐng)求的調(diào)用,給相關(guān)控件裝載初始化值操作

3.User Action用戶交互操作
按鈕的點(diǎn)擊事件,或者cell上的事件交互

4.Delegate代理
UItableview的相關(guān)代理,及其他代理。這里可以也可以拆分成兩個(gè)模塊,主代理和普通代理,主代理只放置UITableViewDelegate,UITableViewDataSource,副代理另寫一個(gè)Pragma Mark

5.NetRequest網(wǎng)絡(luò)請(qǐng)求
在MVVM中一般網(wǎng)絡(luò)請(qǐng)求都是抽在ViewModel中的,所以這里單獨(dú)分一個(gè)Mark給網(wǎng)絡(luò)請(qǐng)求,本來(lái)想再分一個(gè)Mark給數(shù)據(jù)處理的,比如對(duì)數(shù)組中的數(shù)據(jù)進(jìn)行過(guò)濾。一般不是太長(zhǎng)見,如果有規(guī)則性的建議分裝成對(duì)應(yīng)的Category工具庫(kù),如果該類處理的確實(shí)比較多,就加個(gè)Mark。少的話就暫時(shí)放在Other

6.Other其他,

文章寫的可能比較Low,請(qǐng)輕噴沒(méi),如果你們公司還沒(méi)有像這一類的規(guī)范文檔,希望這個(gè)可以幫到你們。當(dāng)然如果你們的邏輯和網(wǎng)絡(luò)處理的又確實(shí)比較多,建議你還是用MVVM。但是對(duì)于大多數(shù)的ViewController交互還是沒(méi)那么特別復(fù)雜的。我覺(jué)得MVC就可以了。類文件也少。又的開發(fā)者View都喜歡寫在ViewController里,這個(gè)本人是有強(qiáng)迫征的,只要是自定義View一律抽離出來(lái)。

這樣即使ViewController比較臃腫找起來(lái)方法是不是也沒(méi)那么困難了,獻(xiàn)給初學(xué)者、團(tuán)隊(duì)開發(fā)者,或者規(guī)范比較差的碼農(nóng),歡迎大家提出各種建議,對(duì)于MVC和MVVC的討論,以及更好更科學(xué)更容易被大家接受的分類方法。如果有代碼風(fēng)格比較好的代碼,希望大家可以分享出來(lái),最近比較忙,有時(shí)間抽空,重新寫個(gè)完整的類似朋友圈的demo,添加完整的注釋,科學(xué)的命名。