淺談 iOS 開發(fā)框架的重要性

不論是前端,后臺,移動端,結(jié)合到現(xiàn)實生活中,處處都會涉及到框架的應(yīng)用,一個初期就設(shè)計優(yōu)良的架構(gòu),素容置疑在項目的可維護性,擴展性,健壯性肯定都有很大的提升蜜氨。所以我們必須要在開發(fā)之前在架構(gòu)上面多下功夫!

對于一個項目來說 架構(gòu) 一直是個值得關(guān)注的大話題, 這里我將其劃分為幾個部分去思考,設(shè)計艺栈。

文件目錄模塊架構(gòu), Coding設(shè)計模式層面架構(gòu) , 網(wǎng)絡(luò)層框架架構(gòu), 數(shù)據(jù)持久化架構(gòu), UIKit層面架構(gòu),暫時先以這幾個重要的層面去考慮,和設(shè)計廊敌。我們來依次討論這幾個模塊的理解和設(shè)計方案。

文件目錄模塊架構(gòu)

對于一個項目來說,最直觀的設(shè)計就是在文件目錄結(jié)構(gòu)上,一個好的文件目錄結(jié)構(gòu)劃分能讓我們自己在開發(fā)過程中更加快速編寫代碼,也能讓新加入的同事更快速的融入到項目中來,你想一下如果文件目錄劃分清晰明了,和一個雜亂無章的目錄結(jié)構(gòu),那個閱讀起來舒服因妙?其就像一本書的編寫排版,讀完排序之后讀者基本讀整本書內(nèi)容有一個清晰的認識,以及在后面閱讀起來隨時能通過排序來找到相應(yīng)的章節(jié).

所以在開發(fā)前期我們都應(yīng)該根據(jù)我們當前項目所有涉及到的業(yè)務(wù)場景,需要使用到的模塊心里都要有一個準備,參考了一些開源項目,以及網(wǎng)上關(guān)于項目目錄劃分的文章, 主流的劃分邏輯大概是分為兩種.

  1. 按項目內(nèi)每個大的模塊功能來進行文件夾劃分.

  2. 按主要的設(shè)計模式來進行劃分,例如: ViewController. View.Model VS ViewModel等.

個人更傾向于第一種, 舉個栗子. 以********支付寶********為例,項目 TabBar 分為 5 個大模塊, 一個是首頁,財富,口碑,朋友,我的. 然后在依次建立 5 個相應(yīng)的文件夾,當然還會有一些涉及功能很多的模塊,比如項目里面的商城,生活號,小程序等,雖然可能都包含在這 5 個大的模塊里面, 我們可以根據(jù)實際場景結(jié)合業(yè)務(wù), 如果某個模塊業(yè)務(wù)涉及場景和業(yè)務(wù)比較復(fù)雜, 都可以單獨為其建立一個獨立的文件夾, 與其他 5 個模塊進行平級別的劃分痰憎。

除了對模塊進行劃分外,我們在對項目里面肯定都會包含的網(wǎng)絡(luò)層,數(shù)據(jù)持久層,工具類庫層,三方資源層等等...這些在項目中使用率高的核心層面,也單獨劃分成一個文件夾的形式,方便以后新增代碼的時候,將其按功能點來添加和劃分。

這樣我們開發(fā)過程中查找相應(yīng)類文件,新增的時候也不會浪費太多的時間,也方便其他人閱讀攀涵。

設(shè)計模式層面架構(gòu)

這里主要是涉及到 設(shè)計模式的選擇上, 目前比較主流的有 MVC.MVVM.MVP铣耘。然后我參考了知名應(yīng)用 小猿搜題庫 出的設(shè)計模式架構(gòu)篇, 其主要是圍繞 MVC 和 MVVM 將其優(yōu)缺點進行一個優(yōu)良改造版. 在兩種架構(gòu)中權(quán)衡而產(chǎn)生的架構(gòu)MVVM without Binding with DataController, 我覺得很值得大家去參考,學(xué)習(xí).

關(guān)于在設(shè)計模式上, 我覺得還是應(yīng)該結(jié)合自己實際業(yè)務(wù)場景去進行選擇最好, 不需要太死板要求為了遵守這種設(shè)計模式而遵守。每一種設(shè)計都有其優(yōu)缺點, 我們應(yīng)該權(quán)衡其利與弊抱著學(xué)習(xí)的態(tài)度來對待, 只要其能真正解決我們的痛點就是一個好的設(shè)計模式, 在選擇上面我比較傾向于項目中多種設(shè)計模式公用的做法以故。 具體根據(jù)當前業(yè)務(wù)場景來蜗细。

網(wǎng)絡(luò)框架架構(gòu)

為什么要對網(wǎng)絡(luò)層進行封裝. 網(wǎng)絡(luò)層的代碼幾乎遍布我們每一個頁面, 想象一下假如我們不對網(wǎng)絡(luò)層進行一個良好的封裝, 每次調(diào)用原生庫 NSURLSession 來請求一段網(wǎng)絡(luò)大家會是什么心情? 在想象一個每次我們請求網(wǎng)絡(luò)的時候基本都會添加一些公共參數(shù),緩存處理,統(tǒng)一錯誤碼等處理吧, 還有請求返回格式化設(shè)置等等. 這些都是基本很少變動的配置, 我們對其都做好封裝,上層直接傳入請求方法,URL,進來即可.

上面說的比較淺, 相信大家在項目中對網(wǎng)絡(luò)層封裝至少都 2 層以上, 本人主要是對 AFNetWorking 進行的一個封裝, 第一層封裝主要對 AFHttpSeesionManage 的初始化設(shè)置以及安全策略,證書校驗,還有請求超時處理等. 第二層則是直接獲取網(wǎng)絡(luò)的類,對其做了一些添加公共參數(shù),處理返回數(shù)據(jù)公共邏輯,返回結(jié)果錯誤碼,添加緩存,緩存處理等怒详。

這樣做的好處有幾點.

1. 假如有一天 AFNetWorking 不更新維護了, Apple 棄用了其最新版本的基于 NSURLSession 的網(wǎng)絡(luò)請求類, 我們可能需要考慮更換一個新的底層網(wǎng)絡(luò)庫. 我們只需要更改第一層封裝庫的代碼即可炉媒。 大大降低了對三方庫的依賴關(guān)系

2. 通過第一層封裝不僅完成了 降低依賴關(guān)系, 我們還做了公共的配置, 方便后續(xù)在做網(wǎng)絡(luò)請求時, 不需要再重新配置, 實現(xiàn)只配置一次即可共全局使用的效果踪区。 類似的第二層添加公共參數(shù)也是如此。

3. 第二層封裝主要是我們在實際業(yè)務(wù)場景中,基本每個網(wǎng)絡(luò)請求都會攜帶一些公共參數(shù), 比如當前項目版本號,設(shè)備號,時間等,后臺要求每次請求都要攜帶上這些公共參數(shù), 我們將其封裝起來橱野。

4. 處理請求結(jié)果錯誤碼,基本同理。

總結(jié):不寫重復(fù)的代碼善玫。

數(shù)據(jù)持久化架構(gòu)

由于項目是主打 IM 即時通訊的, 會涉及到很多數(shù)據(jù)都需要保存到本地, 以及讀取緩存的操作, 所以后期肯定要在數(shù)據(jù)緩存處理,數(shù)據(jù)讀取,數(shù)據(jù)存儲上做精心設(shè)計. 這一塊目前自己能力有限, 主要我們先參考大神文章為主. 留個坑, 后續(xù)我們在來補上, 希望有數(shù)據(jù)結(jié)構(gòu)設(shè)計,緩存處理方案的大神能指一二水援。

UIKit層面架構(gòu)

UIKit 層面涉及到的范圍也比較廣, 我主要從視圖控制器下手進行封裝, 采用 BaseViewController 的方式, 對 ViewController 和 UINavigationController 以及 UITabBarController 等進行一個 基類控制器的封裝, 將一些統(tǒng)一的參數(shù),業(yè)務(wù)等進行配置, 方便后續(xù)在項目中類似的控制器中, 直接通過集成 BaseViewController 就可以輕松實現(xiàn)的功能.

結(jié)語

作者水平有限,文中可能有說的不對,或者錯誤的地方歡迎大家指正。

主要是通過參考網(wǎng)上比較出名的文章,結(jié)合自己項目實際場景來進行,后續(xù)我會把自己看到的相關(guān)資料統(tǒng)統(tǒng)放下面供大家參考! 非常感謝這些大神,前輩為我們提供如此精辟的技術(shù)分享,如同一盞黑暗里的明燈,不斷指引我們走向光明大道茅郎!

參考資料:

iOS應(yīng)用架構(gòu)談 view層的組織和調(diào)用方案

猿題庫 iOS 客戶端架構(gòu)設(shè)計

被誤解的 MVC 和被神化的 MVVM

淺談 MVC蜗元、MVP 和 MVVM 架構(gòu)模式

淺析 iOS 應(yīng)用網(wǎng)絡(luò)層設(shè)計

iOS應(yīng)用架構(gòu)談 網(wǎng)絡(luò)層設(shè)計方案

做一個 App 前需要考慮的幾件事

onmyway133/fantastic-ios-architecture 設(shè)計模式架構(gòu)思想?yún)R總

老碼農(nóng)冒死揭開行業(yè)黑幕:如何編寫無法維護的代碼

不錯開源項目

iOS 視圖控制器轉(zhuǎn)場詳解

今日頭條:iOS 架構(gòu)設(shè)計雜談

優(yōu)秀的 iOS 應(yīng)用架構(gòu):MVVM、MVC系冗、VIPER奕扣,孰優(yōu)孰劣

iOS應(yīng)用架構(gòu)現(xiàn)狀分析

希望此篇文章對您有所幫助,如有不對的地方掌敬,希望大家能留言指出糾正惯豆。謝謝!1己Α?蕖!华临!

學(xué)習(xí)的路上,與君共勉!!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芯杀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子雅潭,更是在濱河造成了極大的恐慌揭厚,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扶供,死亡現(xiàn)場離奇詭異筛圆,居然都是意外死亡,警方通過查閱死者的電腦和手機椿浓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門顽染,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人轰绵,你說我怎么就攤上這事粉寞。” “怎么了左腔?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵唧垦,是天一觀的道長。 經(jīng)常有香客問我液样,道長振亮,這世上最難降的妖魔是什么巧还? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮坊秸,結(jié)果婚禮上麸祷,老公的妹妹穿的比我還像新娘。我一直安慰自己褒搔,他們只是感情好阶牍,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著星瘾,像睡著了一般走孽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上琳状,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天磕瓷,我揣著相機與錄音,去河邊找鬼念逞。 笑死困食,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的翎承。 我是一名探鬼主播陷舅,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼审洞!你這毒婦竟也來了莱睁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤芒澜,失蹤者是張志新(化名)和其女友劉穎仰剿,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痴晦,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡南吮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了誊酌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片部凑。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖碧浊,靈堂內(nèi)的尸體忽然破棺而出涂邀,到底是詐尸還是另有隱情,我是刑警寧澤箱锐,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布比勉,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏浩聋。R本人自食惡果不足惜观蜗,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望衣洁。 院中可真熱鬧墓捻,春花似錦、人聲如沸坊夫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽践樱。三九已至厂画,卻和暖如春凸丸,著一層夾襖步出監(jiān)牢的瞬間拷邢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工屎慢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瞭稼,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓腻惠,卻偏偏與公主長得像环肘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子集灌,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 1悔雹、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_x閱讀 15,968評論 3 119
  • 我們了解了如何迭代 dict 的key和value,那么欣喧,在一個 for 循環(huán)中腌零,能否同時迭代 key和value...
    OoYoO閱讀 162評論 0 0
  • 林染就這么呆呆地坐著,也不說話唆阿,低著頭益涧,偶爾裝作不經(jīng)意的抬頭偷偷看幾眼瘋子,瘋子也好像沒有發(fā)覺驯鳖,與旁邊多年的閨蜜談...
    沐初林染閱讀 46評論 0 0
  • 昵稱:颯颯秋風(fēng)爽why 居住地點:張掖 交友宣言:交友這件事闲询,相處時,若是脾氣相投浅辙,自然親近;淡了扭弧,距離變遠,也無...
    颯颯秋風(fēng)爽why閱讀 243評論 2 3