iOS項目架構(gòu)模式(MVC蛤克、MVVM捺癞、MVCS、VIPER的選擇)

聯(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è)計失去傳承

1.View層的代碼結(jié)構(gòu)規(guī)范

? ? 制定代碼規(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)存叭爱,高性能


謝謝!!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市漱病,隨后出現(xiàn)的幾起案子买雾,更是在濱河造成了極大的恐慌,老刑警劉巖杨帽,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漓穿,死亡現(xiàn)場離奇詭異,居然都是意外死亡注盈,警方通過查閱死者的電腦和手機(jī)晃危,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來老客,“玉大人僚饭,你說我怎么就攤上這事‰逝椋” “怎么了鳍鸵?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長尉间。 經(jīng)常有香客問我偿乖,道長击罪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任汹想,我火速辦了婚禮外邓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘古掏。我一直安慰自己损话,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布槽唾。 她就那樣靜靜地躺著丧枪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪庞萍。 梳的紋絲不亂的頭發(fā)上拧烦,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機(jī)與錄音钝计,去河邊找鬼恋博。 笑死,一個胖子當(dāng)著我的面吹牛私恬,可吹牛的內(nèi)容都是我干的债沮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼本鸣,長吁一口氣:“原來是場噩夢啊……” “哼疫衩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起荣德,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤闷煤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后涮瞻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鲤拿,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年署咽,在試婚紗的時候發(fā)現(xiàn)自己被綠了皆愉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡艇抠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出久锥,到底是詐尸還是另有隱情家淤,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布瑟由,位于F島的核電站絮重,受9級特大地震影響冤寿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜青伤,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一督怜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狠角,春花似錦号杠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至立帖,卻和暖如春眼溶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背晓勇。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工堂飞, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绑咱。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓绰筛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親羡玛。 傳聞我的和親對象是個殘疾皇子别智,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

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