iOS 從0到1搭建高可用App框架

發表於2017-06-05

最近在搭建新專案的iOS框架,一直在思考如何才能搭建出高可用App框架,能否避免後期因為程式碼質量問題的重構。以前接手過許多“爛程式碼”,架構鬆散,底層混亂,缺少規範,導致團隊開發時程式碼風格迥異,清晰的專案結構和良好的程式碼規範是保證產品質量的關鍵,下面分享一下我的架構思路。

架構圖:

11743749-7617df7bd2df5421
架構圖

架構原則:易讀性、易維護性、易擴充套件性。

一、思考

做好一件事,花在思考上的時間應該多於執行。

首先根據產品需求和設計圖,腦中先建立一個產品架構:

1. 產品的定位是什麼。

社交?媒體?遊戲?運動?音視訊?電商……要搞清楚你要做一個什麼型別的App,不同型別的產品,技術選型也有所不同,在這我是搭建一個基礎App架構,可以在此基礎上擴充社交、電商、音視訊等!

2. 技術選型

根據當前產品的需求以及未來可能有的需求(我怎麼知道未來會有什麼需求?可以參照競品,可以發揮想象,如果產品說:“我們要做IM文字聊天,只做文字!不做音視訊,以後都不做!” 類似這樣的承諾,你如果信了他的邪……後面的故事就精彩了。。哈哈哈哈哈哈。。。。所以說這時候你就要考慮到後面會有語音+視訊聊天,在設計的時候不要偷懶,預留一定空間,當某天產品反悔的時候,你可以微微一笑,從容應對。

一把拉回話題,接著說技術選型,通常我會選擇一些當下比較熱門、好用的第三方框架,例如:YYKit ,YYKit 是一組龐大、功能豐富的 iOS 元件,包含Model解析、圖片載入、快取等基礎服務,都是基於Category設計的,使用方便且效能高於一些老的框架,用過的都說好。

其他框架的選擇可以根據專案需求,去GitHub上搜尋,星星多的每個都看一下,會給你增加一些思路。

程式猿長得可以保守,思想一定不能太保守。

二、搭建目錄結構

12743749-5eec25e5a69c7138

目錄圖解

如上圖,我是這樣搭建App目錄結構的,從下到上,使用Pods管理第三方框架,將第三方框架進行二次封裝,供給頂層使用,儘可能減少各模組之間的耦合度,只為更清晰。

三、封裝基礎類

13743749-f88f1bf3414b0d65

1.應用入口

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

14743749-49f4c9f96e3d50fa

2. 功能模組

2. Modules包含了應用內的功能模組,根據底部Tab欄劃分並關聯實體資料夾(預設是虛擬的要手動建立實體資料夾拖進來),每個模組內使用的是MVC模式,有人會問為什麼多了Resource和Service資料夾,MVC是一種設計思想,並非死套路就仨資料夾,根據實際需求適當增加,在這我選擇在Service封裝資料請求,VC裡呼叫拿資料即可,至於Resource為什麼在這,我認為當功能模組層級較多時,每個大功能模組都對應許多資源,對應到模組內用起來方便,當然也可以放到最外層的Resource資料夾裡,建立對應的模組名稱,在這兒我是選擇把公共的放到最外層Resource裡,功能相關的放到模組裡的Resource資料夾內,只為更清晰。

15743749-2480121eaccecc3c

3. 管理模組

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

16743749-dd03de0737474c9b

4.工具類

4. Utils資料夾內主要包含全域性通用工具,來源於對三方框架的二次封裝,或是自己寫的工具類。在這個專案裡,我封裝了帶AES加密網路請求工具,全域性Toast提示,廣告頁等。只為更清晰。

17743749-116d59c9061d2495

5. 基類

5. Base資料夾用來存放專案的基類,基類作用包含一些定製化的內容,例如頁面樣式,空資料頁面等,使用基類來實現,可以統一控制,利於維護,減少冗餘,也為更清晰。

18743749-e70733d5f2138425

6.第三方 & 7.全域性巨集定義

6. 第三方資料夾放一些第三方的類庫和對第三方封裝,比如第三方登入、支付、IM等,現在專案我還沒有新增第三方框架。

7.全域性巨集顧名思義是定義了一些全域性通用巨集。我這裡定義了四個:

UtilsMacros定義的是一些工具巨集,比如獲取螢幕寬高,系統版本,資料型別驗證等;

URLMacros定義伺服器介面地址以及環境開關;

FontAndColorMacros定義全域性用的色值、字型大小,這裡建議跟設計師共同維護一個設計規範,例如:定義一個主色調巨集 MainColor,色值是 0x333333,我們全域性使用MainColor巨集作為背景顏色,當某天App改版,色值改變,我們只需要去更改 0x333333即可,其他程式碼不需要動,同時也能一定程度約束設計師,不要隨便增加一種顏色,非常接近的顏色應當使用一個。如果設計師不願意維護這個規範,你可以嘗試打一架,打不過的話,就只能自己維護了,只為更清晰。

ThirdMacros 包含第三方框架相關的定義,例如keySecret等。只為更清晰。

19743749-93424ab96e246b60

8. 資原始檔

8. 資原始檔,上面說到過,這裡我是存放了全域性的一些資原始檔,功能模組的我放到了模組內的Resource資料夾內,個人喜好,只為更清晰。

20743749-5a0d548626865465

9. Pods三方管理

9. CocoaPods是iOS專案的依賴管理工具,開發iOS專案不可避免地要使用第三方開源庫,CocoaPods的出現使得我們可以節省設定和第三方開源庫的時間。

GitHub原始碼下載 認同請點星

下面對你也許有幫助:

iOS 團隊編碼規範 —— 團隊開發需要共同遵守的程式碼規範

程式碼註釋,教你用快捷鍵+程式碼塊實現快速註釋 —— 讓註釋不再是負擔,快捷鍵幫你解決

通用工具類巨集定義 —— 進一步提升編碼效率

以上屬於臭碼農原創,若有雷同屬巧合,如有錯誤望指正,轉載請標明來源和作者。

相關文章