iOS架構-搭建優質的App框架

前言:

之前看了Casa大神的架構設計文章,醍醐灌頂,一直想開個系列文章記錄一下(這次就做個小小搬運工,別打臉),公司項目實在太忙,最近稍好些,就開始著手做這件事,這個系列共以下幾篇:
1. 搭建優質的App框架
2. view層的組織和調用方案(常用架構模式-MVC、MVCS、MVVM)
3. 網絡層設計方案
4. 數據持久化設計方案及動態部署
5. 組件化方案

框架是一個APP的骨骼,核心,一個項目的所有功能以及以后的迭代都是在此基礎上進行的,它是開展一個項目的至關重要的一步。如果這一步做的不好,會導致結構散亂、閱讀性和擴展性差,影響開發效率甚至導致代碼重構。

APP主要做哪些事情?
  • 調用網絡API
  • 頁面展示
  • 數據的本地持久化
  • 動態部署方案
  • 收集用戶數據,給產品和運營提供參考
  • 合理地組織各業務方開發的業務模塊,以及相關基礎模塊
  • 每日app的自動打包,提供給QA工程師的測試工具
架構原則:易讀性、易維護性、易擴展性。

常見的分層架構:視圖層、業務層、網絡層、數據層。
因此針對每一層我們都要有對應的設計方案。

所謂好架構:

  • 有嚴格的代碼規范,結構目錄清晰,功能模塊分類明確
  • 注釋統一明確,有一致規范
  • 避免復雜的依賴關系,確保代碼的高封裝性和高復用性,減少冗余代碼
  • 沒有橫向依賴,盡可能少的跨層訪問
  • 對業務方該限制的地方有限制,該靈活的地方要給業務方創造靈活實現的條件
  • 易測試,易拓展
  • 接口少,接口參數少
  • 低內存,高性能
  • 提高模塊化程度,增加組件粒度

一、項目目錄結構

確保目錄中每一項都為實體文件夾,而非創建的是Group。

一般包含這么幾項(文件夾):

  1. 應用入口(APPDelegate)
  2. 功能模塊(Modules)
  3. 管理模塊(Manager)
  4. 工具類(Utilities)
  5. 基類(Base)
  6. 分類(Category)
  7. 宏定義、頭文件(Define)
  8. 資源文件(Resource)
  9. 第三方庫(ThridParty)
  10. Pods(管理第三方庫):可對第三方庫進行二次封裝供頂層使用,當第三方庫的接口發生改變的時候,我們只需要改我們所封裝中的接口就可以了。
1. 應用入口(APPDelegate)

AppDelegate是應用的代理,應用級的事件都委托它處理,包含啟動退出、推送等事件,以及IM、支付等第三方的回調,這使得AppDelegate內代碼龐大,錯綜復雜,十分不利于閱讀和維護,因此可以新增了一個AppDelegate+AppService類別,用來處理生命周期之外的業務,AppDelegate作為事件入口,具體實現直接調用類別里的方法,只為更清晰。

2. 功能模塊(Modules)

Modules包含了應用內的功能模塊,一般根據底部Tab欄劃分并關聯實體文件夾(默認是虛擬的要手動建立實體文件夾拖進來),每個模塊內使用的是MVC模式,一般包含Model、View、Controller這三個文件夾,根據需求也可以增加Resource和Service文件夾,Service封裝數據請求,VC里調用拿數據即可,至于Resource為什么在這,我認為當功能模塊層級較多時,每個大功能模塊都對應許多資源,對應到模塊內用起來方便,當然也可以放到最外層的Resource文件夾里,建立對應的模塊名稱,在這兒我是選擇把公共的放到最外層Resource里,功能相關的放到模塊里的Resource文件夾內,只為更清晰。

3. 管理模塊(Manager)

Manager的定義是全局基礎服務,通常使用類方法或者單例來實現,主要包含對應用、用戶的管理和服務,例如網絡狀態監聽,廣告頁應用介紹頁等;用戶快速登錄退出操作以及登錄狀態的獲取等。

4. 工具類(Utilities)

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

5. 基類(Base)

Base文件夾用來存放項目的基類,基類作用包含一些定制化的內容,例如頁面樣式,空數據頁面等,使用基類來實現,可以統一控制,利于維護,減少冗余。

6. 分類(Category)

對系統類、自定義類增加的類別都放在這里。

7. 宏定義文件

全局宏顧名思義是定義了一些全局通用宏、枚舉。
一般是這幾種:工具宏定義(UtilsMacros):比如獲取屏幕寬高,系統版本,顏色賦值,數據類型驗證等;
接口宏定義(URLMacros):定義服務器接口地址以及環境開關;
枚舉(Enumerate):全局的枚舉

8. 資源文件(Resource)

主要是各種文件,json、xml、dat、圖片等。

9. 第三方庫(ThridParty)

第三方文件夾放一些第三方的類庫和對第三方封裝,比如第三方登錄、支付、IM等。

10. CocoaPods

包管理工具,方便我們更新管理第三方庫

全篇精髓參考Casa大神:Casa架構設計

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,570評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,505評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,017評論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,786評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,219評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,438評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,971評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,796評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,995評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,230評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,918評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,697評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容