描述
對于做開發(fā)的我們不知道對框架的重要性理解的有多深。我先談?wù)勎业母惺?。我最近因為某些原因換工作,接手了一個別人寫的項目,于是地獄般的生活開始了。我大概說一下接手項目的幾點讓我無法忍受的點。
- 沒有代碼規(guī)范,寫的隨心所欲,想空幾個空格就空幾個,想空幾個空格就空幾個空格。
- 沒有架構(gòu)的概念,修改代碼找不到對應(yīng)的代碼寫在哪里。
- 基本的MVC的架構(gòu)模式都不成型,沒有model的概念,全是NSDictionary漫天飛,數(shù)據(jù)傳遞一條一條的傳。
- table 的 cell 不復(fù)用,UI直接寫在cellforRow的方法中,直接add到cell上,構(gòu)建的cell里面空空如也。
- 平均每個VC里面的代碼得有2k+,維護(hù)特別不方便,代碼很難定位。
大概就列這幾條其他的就不再吐槽了,首先我想說的是這樣的代碼誰接手了能受得了。于是我就決定在開發(fā)至于從新搭建一個框架。一方面是自己算是學(xué)習(xí)成長了,另一方面也把項目重新構(gòu)建了。
好了回歸正題,首先說一下MVC架構(gòu)吧,這個我覺得的大家都知道,老生常談的問題了我就不贅述了。有不是很清楚的小伙伴可以點上面的鏈接了解一下。
接下來我們說一下基于MVC搭建框架相關(guān)的東東。這是我參考別的文章中的架構(gòu)圖搭建的項目。
架構(gòu)圖:

架構(gòu)原則:易讀性、易維護(hù)性、易擴(kuò)展性。
搭建目錄結(jié)構(gòu)

目錄如圖,從上到下這樣搭建App的目錄結(jié)構(gòu)。用pod管理第三方的框架,部分進(jìn)行封裝,應(yīng)對項目中的需求。降低耦合度并且節(jié)省了手動配置引入各種庫的麻煩。
文件詳解:

1、AppDelegate是應(yīng)用的代理,應(yīng)用級的事件都委托它處理,包含啟動退出、推送等事件,初始化,以及IM、支付等第三方的回調(diào),這使得AppDelegate內(nèi)代碼龐大,錯綜復(fù)雜,十分不利于閱讀和維護(hù),因此新增一個AppDelegate+AppService類別,用來處理生命周期之外的業(yè)務(wù),AppDelegate作為事件入口,具體實現(xiàn)直接調(diào)用類別里的方法,為AppDelegate減負(fù)。

2、我搭建的這個是分為首頁、科普、消息、我的四個模塊。每個模塊是按著MVC的架構(gòu)搭建的,Resource是用來存儲當(dāng)前模塊中需要用到的資源。Other是用來存儲一些其他的資源,如果你想做分散是網(wǎng)絡(luò)請求的話就將這文件夾改名為Service。然后將網(wǎng)絡(luò)請求的文件放在這里。

3、Manager的定義是全局基礎(chǔ)服務(wù),通常使用類方法或者單例來實現(xiàn),主要包含對應(yīng)用、用戶的管理和服務(wù),例如網(wǎng)絡(luò)狀態(tài)監(jiān)聽,廣告頁應(yīng)用介紹頁,統(tǒng)計單例等;用戶快速登錄退出操作以及登錄狀態(tài)的獲取等。

4、Utils文件夾內(nèi)主要包含全局通用工具,來源于對三方框架的二次封裝,或是自己寫的工具類。

5、Base文件夾用來存放項目的基類,基類作用包含一些定制化的內(nèi)容,例如頁面樣式,空數(shù)據(jù)頁面等,使用基類來實現(xiàn),可以統(tǒng)一控制,利于維護(hù),減少冗余。有寫不需要的可以刪除掉。

6、放一些第三方的類庫,有一些pod中沒有的。或者自己自己封裝的類,還有的需要我們手動修改里面源碼來滿足項目需求的類。

7、項目中通用的全局宏定義,我暫時定義了四個可以根據(jù)需求添加。
UtilsMacros:通用的工具宏,如:屏幕的寬高,版本的判斷,機(jī)型的判斷,計算nav,tab,statusBar的高度等。
URLMacros:關(guān)于項目中接口的宏,正式環(huán)境,測試環(huán)境的域名,還有個接口的路徑。方便統(tǒng)一管理和維護(hù)。
FontAndColorMacros:項目中常用的字號,色值,顏色的十六進(jìn)制轉(zhuǎn)換等,字體的自重定義。
KeyMacros:第三方庫的key,和一些通用的關(guān)鍵key,通知的key。

8、資源文件,系統(tǒng)中通用的一些資源可放在這個文件夾中。但是icon的資源要放在Assets中管理。因為這里面可以對相應(yīng)的icon做一寫處理,比如:設(shè)置圖片的縮放,可重復(fù)復(fù)制的區(qū)域等。就是 Show Slicing或Show OverView
,不了解這塊的可以點擊直通車??。

9、CocoaPods是iOS項目的依賴管理工具,開發(fā)的一般都知道這個我就不過多贅述了。
總結(jié)
項目中還有好多細(xì)節(jié)的內(nèi)容沒有填好后期會不斷的完善,大家有啥意見可以盡情的提出來必虛心接受。也可以推薦好用的庫給我哦。另外說一下YYKit是非常好用且全面的組件庫,遇到問題先去里面找一找,也許會有驚喜哦。后期我會上傳demo。歡迎start。