前言
近來,對公司的新項(xiàng)目依據(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ù)。其實(shí),iOS開發(fā)對MVC架構(gòu)的實(shí)踐算是應(yīng)用的很到位了;只是有時(shí)候項(xiàng)目開發(fā)周期緊,大家為了方便把所有東西都塞進(jìn)viewController里面,開發(fā)是快了很多,也造成了后面調(diào)試和維護(hù)浪費(fèi)很多時(shí)間;其次,也因?yàn)橹皩VC理解的不夠深刻吧。
下面內(nèi)容基本都是針對唐巧大神"這篇文章"的一次實(shí)踐,同時(shí)也參考了阿里一位大神的這一系列文章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)這個(gè)模塊)
#pragma mark - getter 和 setter
2.View
View里面基本都是UI的拼接,因此注釋相對簡單
針對控件的賦值,ViewController會傳一個(gè)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ù)模型,里面聲明的變量(或者是屬性,因?yàn)樽兞炕臼峭ㄟ^屬性自動合成)和服務(wù)器請求到得數(shù)據(jù)基本是一一對應(yīng)的;對于復(fù)雜的界面(UITableview或)也許不能使用AutoLayout;因此,這里面多添加了一個(gè)類Layout,里面主要計(jì)算并存儲界面上要顯示內(nèi)容的高度。因此,這里最多的就是私有方法
#pragma mark - 生命周期
#pragma mark - 私有方法
4.Service(MVC里面的業(yè)務(wù)層)
從ViewController盡可能的抽出所有業(yè)務(wù)邏輯封裝在這里,然后在ViewController持有Service的實(shí)例,業(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 - 公有方法(接口)
最后說明:這些是個(gè)人代碼模塊的劃分和模塊內(nèi)代碼的主要分類,針對細(xì)節(jié)性的東西還需要根據(jù)項(xiàng)目或?qū)嶋H的業(yè)務(wù)來分。
二、代碼注釋
1.首先給出幾個(gè)代碼注釋技巧:
// TODO:待處理(針對沒有實(shí)現(xiàn)的方法一般會這樣注釋)
// FIXME:待修改(針對實(shí)現(xiàn)效果不好,或代碼有問題的這樣注釋)
// ???:有疑問(針對就項(xiàng)目維護(hù)或項(xiàng)目引用開源庫,不懂得地方可以使用)
// !!!:重要信息
針對以上的注釋,有專門的收集這些注釋的開源庫,可以根據(jù)個(gè)人愛好使用。
個(gè)人習(xí)慣:針對開發(fā)要使用的開源庫,能不使用盡量不使用。針對調(diào)試使用的代碼庫,能使用的盡量使用(只要它對我有幫助)。
2.其次就是常規(guī)的代碼注釋:
參考芳仔小腳印的博客,要相信女孩子整理東西的能力,何況芳仔也是個(gè)大神。
三、說說代碼規(guī)范
這個(gè)槽不吐不快,何況我英文很渣;因?yàn)橛⑽牟缓?,這個(gè)規(guī)范對我來說難度有點(diǎn)大。
程序員最頭疼的事:命名
然后,最打擊我的一句話是:英語學(xué)不好,菜鳥當(dāng)?shù)嚼希?/p>
我只想說一句:就讓我靜靜的彩筆到老吧。
最后,給出自己使用的代碼規(guī)范。當(dāng)然前提是先遵循蘋果官網(wǎng)的規(guī)范。
野生程序員一枚:公司木有代碼規(guī)范,自己從各個(gè)大神博客里學(xué)習(xí)摘抄,最終自己的項(xiàng)目就形成了這樣的代碼規(guī)范,以后應(yīng)該會隨著學(xué)習(xí)和技術(shù)的提升還有很大改觀吧。
如有錯(cuò)誤,望批評指正。