關(guān)于項目架構(gòu)的知識

1.MVC锌半、MVP蟆融、MVVM模式

MVC(Model司训、View除嘹、Controller)

MVC是比較直觀的架構(gòu)模式碗硬,最核心的就是通過Controller層來進行調(diào)控另伍,首先看一下官方提供的MVC示意圖:


image.png
  • Model和View永遠不能相互通信商佛,只能通過Controller傳遞
  • Controller可以直接與Model對話(讀寫調(diào)用Model)慎冤,Model通過NSNotification和KVO機制與Controller間接通信
    Controller可以直接與View對話砌创,通過IBoutlet直接操作View虏缸,IBoutlet直接對應View控件(例如創(chuàng)建一個Button:需聲明一個IBOutlet UIButton *btn),View通過action向Controller報告時間的發(fā)生(用戶點擊了按鈕)。Controller是View的直接數(shù)據(jù)源
  • 優(yōu)點:對于混亂的項目組織方式嫩实,有了一個明確的組織方式刽辙。通過Controller來掌控全局,同時將View展示和Model的變化分開
  • 缺點:愈發(fā)笨重的Controller甲献,隨著業(yè)務邏輯的增加宰缤,大量的代碼放進Controller,導致Controller越來越臃腫晃洒,堆積成千上萬行代碼慨灭,后期維護起來費時費力

MVP(Model、View锥累、Presenter)

MVP模式是MVC模式的一個演化版本缘挑,其中Model與MVC模式中Model層沒有太大區(qū)別,主要提供數(shù)據(jù)存儲功能桶略,一般都是用來封裝網(wǎng)絡(luò)獲取的json數(shù)據(jù)语淘;View與MVC中的View層有一些差別,MVP中的View層可以是viewController际歼、view等控件惶翻;Presenter層則是作為Model和View的中介,從Model層獲取數(shù)據(jù)之后傳給View鹅心。


image.png

從上圖可以看出吕粗,從MVC模式中增加了Persenter層,將UIViewController中復雜的業(yè)務邏輯旭愧、網(wǎng)絡(luò)請求等剝離出來颅筋。

  • 優(yōu)點:模式和視圖完全分離,可以做到修改視圖而不影響模型输枯;更高效的使用模型议泵,View不依賴Model,可以說View能做到對業(yè)務邏輯完全分離
  • 缺點:Persenter中除了處理業(yè)務邏輯以外桃熄,還要處理View-Model兩層的協(xié)調(diào)先口,也會導致Presenter層的臃腫

MVVM(Model、Controller/View、ViewModel)

  • 在MVVM中碉京,view和ViewController聯(lián)系在一起厢汹,我們把它們視為一個組件,view和ViewController都不能直接飲用model谐宙,而是飲用視圖模型即ViewModel烫葬。
    viewModel是一個用來放置用戶輸入驗證邏輯、視圖顯示邏輯卧惜、網(wǎng)絡(luò)請求等業(yè)務邏輯的地方厘灼,這樣的設(shè)計模式夹纫,會輕微增加代碼量咽瓷,但是會減少代碼的復雜性
  • 優(yōu)點:View可以獨立于Model的變化和修改,一個ViewModel可以綁定到不同的View上舰讹,降低耦合茅姜,增加重用
  • 缺點:過于簡單的項目不適用、大型的項目視圖狀態(tài)較多時構(gòu)建和維護成本太大

合理的運用架構(gòu)模式有利于項目月匣、團隊開發(fā)工作钻洒,大師到底選擇哪個設(shè)計模式,哪種設(shè)計模式更好锄开,就像本文開頭所說素标,不同的設(shè)計模式,只是讓不同的場景有了更多的選擇方案萍悴。根據(jù)項目場景和開發(fā)需求头遭,選擇最合適的解決方案。

2.關(guān)于RAC你有怎樣運用到解決不同API依賴關(guān)系

信號的依賴:使用場景是當信號A執(zhí)行完才會執(zhí)行信號B癣诱,和請求的依賴很類似计维,如果請求A請求完畢才執(zhí)行請求B,我們需要注意信號A必須要執(zhí)行發(fā)送完成信號撕予,否則信號B無法執(zhí)行

//這相當于網(wǎng)絡(luò)請求中的依賴鲫惶,必須先執(zhí)行完信號A才會執(zhí)行信號B
//經(jīng)常用作一個請求執(zhí)行完畢后,才會執(zhí)行另一個請求
//注意信號A必須要執(zhí)行發(fā)送完成信號实抡。否則信號B無法執(zhí)行
RACSignal *concatSignal = [self.signalA concat:self.signalB];
//這里我們是對這個拼接信號進行訂閱
[concatSignal subscribeNext:^(id x) {
    NSLog(@"%@",x);
}];

3.@weakify和我們宏定義的WeakSelf有什么區(qū)別欠母?

@weakify可以多參數(shù)使用

4.微服務架構(gòu)攝像。

微服務架構(gòu)具有以下優(yōu)勢:

  • 1.靈活和獨立的可擴展性
    靈活擴展是微服務架構(gòu)的主要優(yōu)勢之一吆寨。與單片架構(gòu)不同赏淌,每個模塊都可以水平擴展并獨立于其他模塊。因此鸟废,微服務架構(gòu)非常適合大型項目猜敢。
  • 2.獨立技術(shù)堆棧
    在微服務架構(gòu)中,軟件工程師有機會使用各種工具和技術(shù)構(gòu)建APP。代碼可以用不同的編程語言編寫缩擂,這為APP開發(fā)過程增加了更多的靈活性鼠冕。
  • 3.更好的故障隔離
    如果一個服務失敗,它不會影響其他服務的功能胯盯。與其他體系結(jié)構(gòu)樣式相比懈费,在微服務中,系統(tǒng)繼續(xù)工作博脑,單片模式下的問題會影響整個APP憎乙。
  • 4.易于部署和集成
    死哦燃煤即使是小代碼更改的情況下,開發(fā)人員也必須再次部署APP叉趣,但在微服務架構(gòu)中泞边,部署變得更快更輕松。
    由于所有服務都是圍繞單一業(yè)務流程構(gòu)建的疗杉,因此程序員不必修改和重新部署整個APP阵谚,只需要您需要的區(qū)域。因此烟具,改進產(chǎn)品也比較簡單梢什。
    微服務可以通過全自動部署機制獨立部署。此外朝聋,通過使用開源持續(xù)集成工具嗡午,開發(fā)人員大大簡化了與第三方服務的集成。
  • 5.容易理解
    微服務體系結(jié)構(gòu)的另一個優(yōu)點是很容易理解系統(tǒng)是如何工作的以及它是如何開發(fā)的冀痕。當一個新的團隊成員來到這個項目并且必須快速鉆研它時荔睹,這特別有用。
    那么在iOS中五河借鑒這種思想去構(gòu)建我們的App呢金度?是需要我們開發(fā)者自己去不斷探索的应媚。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市猜极,隨后出現(xiàn)的幾起案子中姜,更是在濱河造成了極大的恐慌,老刑警劉巖跟伏,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丢胚,死亡現(xiàn)場離奇詭異,居然都是意外死亡受扳,警方通過查閱死者的電腦和手機携龟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勘高,“玉大人峡蟋,你說我怎么就攤上這事坟桅。” “怎么了蕊蝗?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵仅乓,是天一觀的道長。 經(jīng)常有香客問我蓬戚,道長夸楣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任子漩,我火速辦了婚禮豫喧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘幢泼。我一直安慰自己紧显,他們只是感情好,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布旭绒。 她就那樣靜靜地躺著鸟妙,像睡著了一般焦人。 火紅的嫁衣襯著肌膚如雪挥吵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天花椭,我揣著相機與錄音忽匈,去河邊找鬼。 笑死矿辽,一個胖子當著我的面吹牛丹允,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播袋倔,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼雕蔽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宾娜?” 一聲冷哼從身側(cè)響起批狐,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎前塔,沒想到半個月后嚣艇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡华弓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年食零,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寂屏。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡贰谣,死狀恐怖娜搂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吱抚,我是刑警寧澤涌攻,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站频伤,受9級特大地震影響恳谎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜憋肖,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一因痛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧岸更,春花似錦鸵膏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至评肆,卻和暖如春债查,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瓜挽。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工盹廷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人久橙。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓俄占,卻偏偏與公主長得像,于是被迫代替她去往敵國和親淆衷。 傳聞我的和親對象是個殘疾皇子缸榄,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

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

  • UIKit 1.UIView 和 CALayer 是什么關(guān)系? UIView 繼承 UIResponder祝拯,而 U...
    Sephiroth_Ma閱讀 2,212評論 0 25
  • OC的理解與特性 OC作為一門面向?qū)ο蟮恼Z言甚带,自然具有面向?qū)ο蟮恼Z言特性:封裝、繼承鹿驼、多態(tài)欲低。它既具有靜態(tài)語言的特性...
    失憶的程序員閱讀 488評論 0 1
  • MVC 經(jīng)典就是經(jīng)典,沒有之一畜晰。iOS中MVC架構(gòu)砾莱,看懂斯坦福大學白胡子老頭這張圖基本上就可以了。 簡單理解凄鼻,就是...
    勇往直前888閱讀 11,001評論 6 37
  • MVC 經(jīng)典就是經(jīng)典腊瑟,沒有之一聚假。iOS中MVC架構(gòu),看懂斯坦福大學白胡子老頭這張圖基本上就可以了闰非。 斯坦福大學MV...
    五八四十閱讀 570評論 0 0
  • MVC Cocoa 的 MVC 模式驅(qū)使人們寫出臃腫的視圖控制器膘格,因為它們經(jīng)常被混雜到 View 的生命周期中,因...
    MichaelLedger閱讀 1,061評論 0 5