iOS 項(xiàng)目的目錄結(jié)構(gòu)風(fēng)格

怎樣才能看出一個(gè)人的代碼功底,豐富的項(xiàng)目經(jīng)驗(yàn)。首先有一點(diǎn)肯定要有自己的項(xiàng)目目錄結(jié)構(gòu),優(yōu)秀的項(xiàng)目目錄結(jié)構(gòu),不僅讓自己開(kāi)發(fā)效率更高,也能讓他人一目了然看出整體項(xiàng)目的大致方向,使項(xiàng)目中其他伙伴容易閱讀你的代碼,共同開(kāi)發(fā)。

下面截圖是我其中一個(gè)的項(xiàng)目目錄結(jié)構(gòu)風(fēng)格:


項(xiàng)目目錄結(jié)構(gòu)

Basic ?----- 主要包括繼承UIViewController的基類(lèi)BasicViewController和繼承UINavigationController的基類(lèi)BasicNavController。因?yàn)楹竺娴目刂破骰径紩?huì)繼承使用。

AppDelegate ----- 主要包括AppDelegate和ViewController。

Main ----- 入口目錄,主要看項(xiàng)目需要和個(gè)人代碼風(fēng)格。我這個(gè)項(xiàng)目中只有Start(啟動(dòng)頁(yè))、tabBar。有些可能需要封裝一個(gè)反射機(jī)制的目錄。

? ? ? ? ?Start ----- 啟動(dòng)頁(yè)

? ? ? ? ?tabBar ----- 封裝UITabBarController

Business ----- 業(yè)務(wù)目錄,用于模塊開(kāi)發(fā)

設(shè)計(jì)模式我一般使用MVC+MVVM混合開(kāi)發(fā),頁(yè)面簡(jiǎn)單沒(méi)有多少業(yè)務(wù)邏輯一般用MVC,對(duì)于頁(yè)面復(fù)雜、業(yè)務(wù)邏輯多一般用MVVM。當(dāng)然設(shè)計(jì)模式是死的,我們要靈活運(yùn)用到項(xiàng)目中,高效、美觀、易閱讀、易迭代才是我們開(kāi)發(fā)者所追求的目標(biāo),曾經(jīng)寫(xiě)過(guò)一個(gè)項(xiàng)目的其中一個(gè)模塊,我盡量把邏輯、網(wǎng)絡(luò)、視圖、事件都移出Controller,Controller只單單用于展示,但是由于Controller的屬性過(guò)多,Controller看起來(lái)還是很臃腫。后來(lái)想起可不可以將Controller的屬性封裝成屬性model來(lái)使用,后面業(yè)務(wù)繁忙就落下了這個(gè)問(wèn)題。

目前業(yè)務(wù)開(kāi)發(fā)結(jié)構(gòu)分兩種:一、每個(gè)功能塊都包含一個(gè)MVVM。二、一個(gè)MVVM下面包括所有功能塊。而我用的是第一種,按功能塊開(kāi)發(fā)會(huì)清楚方便些。

Config ----- 配置目錄,主要放.pch、.h宏文件等

Operation ----- 用于網(wǎng)絡(luò)、數(shù)據(jù)、工具等操作

? ? ? ? Categorg ----- 存放控件的分類(lèi),比如UILabel+Util、UIImage+Util、 ? ? ??UIColor+Contract等。

? ? ? ? Data ----- 數(shù)據(jù)層代碼,用于本地?cái)?shù)據(jù)保存讀取的操作,數(shù)據(jù)庫(kù)操作。

? ? ? ? Tools ----- 工具類(lèi),這個(gè)看你個(gè)人如何分類(lèi)了,比如控件點(diǎn)擊事件封裝成工具、對(duì)GCD封裝成工具等等,無(wú)論是控件、還是操作都可以做成工具。

? ? ? ? ?Net ----- 網(wǎng)絡(luò)層代碼,用于封裝網(wǎng)絡(luò)的。

Resources ----- 資源目錄,一般項(xiàng)目中的.plist,.xcassets都放在這里,還有的視頻文件、圖片文件、文檔文件都放在這里。

Vendors ----- 第三方組件,包括Components(自定義控件)、Libs(第三方庫(kù),自定義庫(kù))

? ? ? ? ? ?Components ----- 自定義控件,比如自定義的MyView,繼承于View等。

? ? ? ? ? ?Libs ----- 第三方庫(kù),自定義庫(kù),比如極光友盟導(dǎo)入的靜態(tài)庫(kù),第三方登錄導(dǎo)入的靜態(tài)庫(kù),以及自己封裝好的sdk。

ps : 每個(gè)目錄結(jié)構(gòu)風(fēng)格沒(méi)有優(yōu)劣高低之分,適合自己的風(fēng)格,適合當(dāng)前業(yè)務(wù)開(kāi)發(fā)才是最好的,別人的只是用于參考,就像于有些人喜歡用中文備注,有些人喜歡用英文一樣。不過(guò)我覺(jué)得有句話(huà)是最能體現(xiàn)我們開(kāi)發(fā)目錄結(jié)構(gòu)這種思想的意義所在,高效、美觀、易閱讀、易迭代才是我們開(kāi)發(fā)者所追求的目標(biāo)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容