前言
近來,對公司的新項目依據(jù)MVC架構(gòu)對代碼進(jìn)行了深度拆分和重新封裝狞山,將幾千行代碼的viewController文件盡量拆分到600行以內(nèi)陈症;將業(yè)務(wù)邏輯、網(wǎng)絡(luò)請求赖瞒、數(shù)據(jù)持久化(數(shù)據(jù)存儲)和數(shù)據(jù)模型單獨(dú)封裝女揭,使代碼結(jié)構(gòu)變的清晰、易于維護(hù)栏饮。其實吧兔,iOS開發(fā)對MVC架構(gòu)的實踐算是應(yīng)用的很到位了;只是有時候項目開發(fā)周期緊袍嬉,大家為了方便把所有東西都塞進(jìn)viewController里面境蔼,開發(fā)是快了很多灶平,也造成了后面調(diào)試和維護(hù)浪費(fèi)很多時間;其次箍土,也因為之前對MVC理解的不夠深刻吧逢享。
下面內(nèi)容基本都是針對唐巧大神"這篇文章"的一次實踐,同時也參考了阿里一位大神的這一系列文章iOS應(yīng)用架構(gòu)談(1~4)涮帘,內(nèi)容包括:代碼注釋拼苍、View拼湊、VC瘦身调缨、數(shù)據(jù)模型、網(wǎng)絡(luò)層吆你、數(shù)據(jù)持久化封裝等弦叶;盡量保證代碼結(jié)構(gòu)清晰,整潔妇多。
一伤哺、MVC內(nèi)部代碼劃分:
1.viewController
#pragma mark - 生命周期(業(yè)務(wù)流程基本在這里展現(xiàn))
#pragma mark - 代理(包含了UITableView和view的事件代理等)
#pragma mark - 事件處理
#pragma mark - 私有方法(盡量不要出現(xiàn)這個模塊)
#pragma mark - getter 和 setter
2.View
View里面基本都是UI的拼接,因此注釋相對簡單
針對控件的賦值者祖,ViewController會傳一個Model過來立莉,在setter里面給所有控件賦值
#pragma mark - 生命周期(基本是控件的創(chuàng)建和初始化)
#pragma mark - 共有方法
#pragma mark - 事件處理(通過代理,代理到VC里面處理)
#pragma mark - 私有方法(針對一些沒有必要開新類的處理七问,用方法封裝到這里)
#pragma mark - getter 和 setter(控件的構(gòu)建基本通過getter方法完成)
3.Model
Model是數(shù)據(jù)模型蜓耻,里面聲明的變量(或者是屬性,因為變量基本是通過屬性自動合成)和服務(wù)器請求到得數(shù)據(jù)基本是一一對應(yīng)的械巡;對于復(fù)雜的界面(UITableview或)也許不能使用AutoLayout刹淌;因此,這里面多添加了一個類Layout,里面主要計算并存儲界面上要顯示內(nèi)容的高度讥耗。因此有勾,這里最多的就是私有方法
#pragma mark - 生命周期
#pragma mark - 私有方法
4.Service(MVC里面的業(yè)務(wù)層)
從ViewController盡可能的抽出所有業(yè)務(wù)邏輯封裝在這里,然后在ViewController持有Service的實例古程,業(yè)務(wù)層所有業(yè)務(wù)都針對ViewController提供接口蔼卡。因此,這里最多的就是共有接口
#pragma mark - 生命周期
#pragma mark - 公有方法(接口)
5.數(shù)據(jù)持久化
位于Service層之下挣磨,位于Model層之上雇逞;一般操作是:
- 業(yè)務(wù)層通過網(wǎng)絡(luò)請求數(shù)據(jù)或者從文件、緩存等處讀取數(shù)據(jù)(文件趋急、緩存等和數(shù)據(jù)持久化有關(guān))喝峦;
- 用戶操作界面,造成一些改變呜达,變化或通過view代理到ViewController谣蠢,ViewController操作Service層進(jìn)行一些業(yè)務(wù)處理(也就是數(shù)據(jù)的變化,這里的變化基本上都需要Model的配合),然后寫入文件或者寫入緩沖眉踱,亦或是通過網(wǎng)絡(luò)發(fā)送給遠(yuǎn)程服務(wù)器挤忙。
#pragma mark - 生命周期
#pragma mark - 公有方法(接口)
最后說明:這些是個人代碼模塊的劃分和模塊內(nèi)代碼的主要分類,針對細(xì)節(jié)性的東西還需要根據(jù)項目或?qū)嶋H的業(yè)務(wù)來分谈喳。
二岩调、代碼注釋
1.首先給出幾個代碼注釋技巧:
// TODO:待處理(針對沒有實現(xiàn)的方法一般會這樣注釋)
// FIXME:待修改(針對實現(xiàn)效果不好,或代碼有問題的這樣注釋)
// ???:有疑問(針對就項目維護(hù)或項目引用開源庫睡陪,不懂得地方可以使用)
// !!!:重要信息
針對以上的注釋巴席,有專門的收集這些注釋的開源庫,可以根據(jù)個人愛好使用扭倾。
個人習(xí)慣:針對開發(fā)要使用的開源庫淀零,能不使用盡量不使用。針對調(diào)試使用的代碼庫膛壹,能使用的盡量使用(只要它對我有幫助)驾中。
2.其次就是常規(guī)的代碼注釋:
參考芳仔小腳印的博客,要相信女孩子整理東西的能力模聋,何況芳仔也是個大神肩民。
三、說說代碼規(guī)范
這個槽不吐不快链方,何況我英文很渣持痰;因為英文不好,這個規(guī)范對我來說難度有點(diǎn)大侄柔。
程序員最頭疼的事:命名
然后共啃,最打擊我的一句話是:英語學(xué)不好,菜鳥當(dāng)?shù)嚼希?/p>
我只想說一句:就讓我靜靜的彩筆到老吧暂题。
最后移剪,給出自己使用的代碼規(guī)范。當(dāng)然前提是先遵循蘋果官網(wǎng)的規(guī)范薪者。
野生程序員一枚:公司木有代碼規(guī)范纵苛,自己從各個大神博客里學(xué)習(xí)摘抄,最終自己的項目就形成了這樣的代碼規(guī)范言津,以后應(yīng)該會隨著學(xué)習(xí)和技術(shù)的提升還有很大改觀吧攻人。
如有錯誤,望批評指正悬槽。