--- title: "打造你的 App 架構 - iOS 模塊化及路由方案" tags: "iPlayground2020" --- # 打造你的 App 架構 - iOS 模塊化及路由方案 {%speakerdeck wchuang/da-zao-ni-de-app-jia-gou-ios-mo-kuai-hua-ji-lu-you %} # 打造你的 App 架構 - iOS 模塊化及路由方案 Frank 17LIVE/ 前滴滴出行 iOS 模塊化和路由,在兩三年前就已經在大陸很紅(火)了 字節跳動有分團隊,有基礎架構和業務,基礎架構有涵蓋到這個部分 ## 模塊化/模組化 ### SDK 設計 - 讓每個功能獨立存在,減少耦合 - 把 App 裡每個功能都當作 SDK 來設計 - 將 App 內核心功能進行分類 ### 設計原則 - 定義易用穩定的公開接口 - 封裝不必要的細節 - SOLID 準則 ### 大型專案可能會面臨的問題 - 業務界線不明確 - 通用功能與業務功能耦合 - 重複的輪子太多 - 一堆詭異的常數定義 - 無法快速產生 B 專案 ### 如何開始 熟悉業務邏輯(頁面的跳轉和商業邏輯)看程式碼或是文件,整理出流程圖 ### 分層架構 - Modules (Login/ Product/ ...) - ServiceManager (Auth/ Common Model) - AppKit (Router/ ImageManager/ ThemeManager/ UIComponents) - Foundation (Network/ DB/ Utilities/ Others) ### 路由 蘋果有提供 OpenURL App 內路由,讓 VC 之間可以互相溝通 #### 常見的解決方案 Objc - JLRoutes - MGJRouter - routable-ios - CTMediator ### 設計思路 - 定義每個頁面的 URIs 規則 - 路由內部維護 mapping table - 註冊每條 URIs 對應的頁面、參數、行為 - 傳入 URI - 解析 ### MGJrouter - URI 有相同的前綴 `mgj://` - 註冊所有的 URIs - 在某個 VC 呼叫 `[MGJRouter openURL:userProfileURL withUserInfo:userInfo completion:^(id result) {}];` - 處理呼叫後的邏輯 `userInfo` 中可以放需要的 `data`,例如 `userID`,以及 `sourceViewController`,讓新的頁面可以加在 `sourceViewController` 上 ## 總結 - 模塊化對專案的影響 - 開發者思維轉變 - 有層次的架構 - 路由解耦頁面跳轉、溝通 - 沒有最好的,只有最適合的 ###### tags:`iPlayground2020`