聯(lián)系人:石虎 QQ:1224614774昵稱:?嗡嘛呢叭咪哄
?????????????????? QQ群:807236138群稱:?iOS 技術(shù)交流學(xué)習(xí)群
一构挤、概念
? ? ? ? ? ? 沒有最好的架構(gòu)髓介,只有適合自己的業(yè)務(wù)的架構(gòu)才是最好的架構(gòu),并且它是逐步地變強(qiáng)變大筋现。
? ? ? ? ? ?架構(gòu)唐础,又名軟件架構(gòu),是有關(guān)軟件整體結(jié)構(gòu)與組件的抽象描述矾飞,用于指導(dǎo)大型軟件系統(tǒng)各個方面的設(shè)計一膨。
二、iOS的系統(tǒng)架構(gòu)分為四個層次:
? ? ? ? ? 核心操作系統(tǒng)層(Core OS layer)洒沦、核心服務(wù)層(Core Services layer)豹绪、媒體層(Media layer)和可觸摸層(Cocoa Touch layer)。下面是IOS系統(tǒng)結(jié)構(gòu)圖申眼。
?? ? ? 1瞒津、Core OS是位于iOS系統(tǒng)架構(gòu)最下面的一層是核心操作系統(tǒng)層蝉衣,它包括內(nèi)存管理、文件系統(tǒng)巷蚪、電源管理以及一些其他的操作系統(tǒng)任務(wù)病毡。它可以直接和硬件設(shè)備進(jìn)行交互。作為app開發(fā)者不需要與這一層打交道钓辆。
? ? ? 2剪验、Core Services是核心服務(wù)層,可以通過它來訪問iOS的一些服務(wù)前联。
? ? ? 3功戚、Media是媒體層,通過它我們可以在應(yīng)用程序中使用各種媒體文件似嗤,進(jìn)行音頻與視頻的錄制啸臀,圖形的繪制,以及制作基礎(chǔ)的動畫效果烁落。 ?
? ? ? 4乘粒、Cocoa Touch是可觸摸層,這一層為我們的應(yīng)用程序開發(fā)提供了各種有用的框架伤塌,并且大部分與用戶界面有關(guān)灯萍,本質(zhì)上來說它負(fù)責(zé)用戶在iOS設(shè)備上的觸摸交互操作。
? ? ? ?iOS是基于UNIX內(nèi)核每聪,android是基于Linux內(nèi)核旦棉,iOS和android作為兩款優(yōu)秀的手機(jī)操作系統(tǒng),他們有共性有區(qū)別药薯,下面分享一張android系統(tǒng)架構(gòu)圖:
三绑洛、常見的分層架構(gòu)
? ? ? ?有三層架構(gòu):視圖層、業(yè)務(wù)層童本、數(shù)據(jù)層真屯。
? ? ? ?也有四層架構(gòu):視圖層、業(yè)務(wù)層穷娱、網(wǎng)絡(luò)層绑蔫、本地數(shù)據(jù)層。
? ? ? ?這里說三層鄙煤、四層晾匠,跟TCP/IP所謂的五層或者七層不是同一種概念。再具體說就是:你的架構(gòu)在邏輯上設(shè)計的是幾層那就是幾層梯刚,具體每一層的名稱和作用凉馆,沒有特定的規(guī)范, 這主要是針對模塊分類而言的。
? ? ? 1.視圖層設(shè)計方案
? ? ? 2.網(wǎng)絡(luò)層設(shè)計方案?
? ? ? 3.本地持久化方案
? ? ? 4.動態(tài)部署方案
上面這四大點,稍微細(xì)說一下就是:
頁面如何組織澜共,才能盡可能降低業(yè)務(wù)方代碼的耦合度向叉?盡可能降低業(yè)務(wù)方開發(fā)界面的復(fù)雜度,提高他們的效率嗦董?
如何讓業(yè)務(wù)開發(fā)工程師方便安全地調(diào)用網(wǎng)絡(luò)API母谎?然后盡可能保證用戶在各種網(wǎng)絡(luò)環(huán)境下都能有良好的體驗?
當(dāng)數(shù)據(jù)有在本地存取的需求的時候京革,如何能夠保證數(shù)據(jù)在本地的合理安排奇唤?如何盡可能地減小性能消耗?
iOS應(yīng)用有審核周期匹摇,如何能夠通過不發(fā)版本的方式展示新的內(nèi)容給用戶咬扇?如何修復(fù)緊急bug?
四廊勃、視圖層設(shè)計方案
? ? 一般來說懈贺,一個不夠好的View層架構(gòu),主要原因有以下五種:
? ? ?1.代碼混亂不規(guī)范
? ? ?2.過多繼承導(dǎo)致的復(fù)雜依賴關(guān)系
? ? ?3.模塊化程度不夠高坡垫,組件粒度不夠細(xì)
? ? ?4.橫向依賴
? ? ?5.架構(gòu)設(shè)計失去傳承
? ? 制定代碼規(guī)范嚴(yán)格來講不屬于View層架構(gòu)的事情梭灿,但它對View層架構(gòu)未來的影響會比較大,也是屬于架構(gòu)師在設(shè)計View層架構(gòu)時需要考慮的事情冰悠。制定View層規(guī)范的重要性在于:
? ? 1.提高業(yè)務(wù)方View層的可讀性可維護(hù)性
? ? 2.防止業(yè)務(wù)代碼對架構(gòu)產(chǎn)生腐蝕?
? ? 3.確保傳承
? ? 4.保持架構(gòu)發(fā)展的方向不輕易被不合理的意見所左右
五堡妒、架構(gòu)模式(MVC、MVVM溉卓、MVCS涕蚤、VIPER的選擇)
MVC
任務(wù)均攤–View和Model確實是分開的,但是View和Controller卻是緊密耦合的
可測試性–由于糟糕的分散性的诵,只能對Model進(jìn)行測試
易用性–與其他幾種模式相比最小的代碼量。熟悉的人很多佑钾,因而即使對于經(jīng)驗不那么豐富的開發(fā)者來講維護(hù)起來也較為容易西疤。
MVVM
任務(wù)均攤 – 在例子中并不是很清晰,但是事實上休溶,MVVM的View要比MVP中的View承擔(dān)的責(zé)任多代赁。因為前者通過ViewModel的設(shè)置綁定來更新狀態(tài),而后者只監(jiān)聽Presenter的事件但并不會對自己有什么更新兽掰。
可測試性 – ViewModel不知道關(guān)于View的任何事情芭碍,這允許我們可以輕易的測試ViewModel。同時View也可以被測試孽尽,但是由于屬于UIKit的范疇窖壕,對他們的測試通常會被忽略。
易用性 – 在我們例子中的代碼量和MVP的差不多,但是在實際開發(fā)中瞻讽,我們必須把View中的事件指向Presenter并且手動的來更新View鸳吸,如果使用綁定的話,MVVM代碼量將會小的多速勇。
VIPER
任務(wù)均攤 – 毫無疑問晌砾,VIPER是任務(wù)劃分中的佼佼者。
可測試性 – 不出意外地烦磁,更好的分布性就有更好的可測試性养匈。
易用性 – 最后你可能已經(jīng)猜到了維護(hù)成本方面的問題。你必須為很小功能的類寫出大量的接口都伪。
六呕乎、總結(jié)
一個好的架構(gòu)
遵循代碼規(guī)范代碼,分類明確(沒有難以區(qū)分模塊的文件夾或模塊)
注釋明了, 邏輯清晰, 不用文檔院溺,或很少文檔楣嘁,就能讓業(yè)務(wù)方上手
思路和方法要統(tǒng)一,盡量不要多元
沒有橫向依賴珍逸,盡可能少的跨層訪問
對業(yè)務(wù)方該限制的地方有限制逐虚,該靈活的地方要給業(yè)務(wù)方創(chuàng)造靈活實現(xiàn)的條件
易測試,易拓展
保持一定量的超前性
接口少谆膳,接口參數(shù)少
低內(nèi)存叭爱,高性能