91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

iOS開發(fā)幾個(gè)架構(gòu)的對(duì)比

汽車玩家 ? 來源:IT知識(shí)課堂 ? 作者:IT知識(shí)課堂 ? 2020-05-05 23:17 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

iOS開發(fā)中蘋果定義了一套MVC的軟件架構(gòu)。前幾天,同事們聊起了MVC、MVP、MVVM等架構(gòu)的區(qū)別。今天,我也來對(duì)此給出一些自己的理解。

MVC

基本MVC模式

如下圖所示為基本的MVC(Model-View-Controller)模式結(jié)構(gòu)圖,可分為三部分:模型(Model)、視圖(View)、控制器(Controller)。其在MVC模式中所扮演的角色分別為:

Model:模型管理應(yīng)用程序的數(shù)據(jù),響應(yīng)有關(guān)其狀態(tài)信息(通常來自View)的請(qǐng)求,并響應(yīng)指令以更改狀態(tài)(通常來自Controller)。

View:視圖管理數(shù)據(jù)的展示。

Controller:控制器解釋用戶的輸入,并通知模型、視圖進(jìn)行狀態(tài)更新。

iOS開發(fā)幾個(gè)架構(gòu)的對(duì)比

其中,View和Controller依賴于Model,而Model并不依賴于View和Controller。這種設(shè)計(jì)模式的優(yōu)點(diǎn)在于允許Model不受View的影響,從而能夠進(jìn)行獨(dú)立的構(gòu)建和測(cè)試。

此外,根據(jù)Model的具體實(shí)現(xiàn)還可以進(jìn)一步分為:主動(dòng)型Model、被動(dòng)型Model。

被動(dòng)型Model MVC模式

當(dāng)只有一個(gè)Controller操控著Model時(shí)可以采用被動(dòng)型Model。Controller定義Model,并在Model發(fā)生改變時(shí)通知View,后者再進(jìn)行更新。在這種場景下,Model完全獨(dú)立于View和Controller。實(shí)際上,被動(dòng)型Model MVC模式就是基本的MVC模式。

主動(dòng)型Model MVC模式

當(dāng)Model的狀態(tài)未受Controller干擾的情況下發(fā)生變化時(shí),使用主動(dòng)型Model。當(dāng)其他來源正在更改數(shù)據(jù)并且必須立刻反應(yīng)到View中時(shí),可能會(huì)發(fā)生這種情況。

為了實(shí)現(xiàn)主動(dòng)型Model,通常使用Observer模式來提供了一種機(jī)制來提醒其他對(duì)象的狀態(tài)變化,避免引入依賴關(guān)系。各個(gè)View實(shí)現(xiàn)Observer接口并向Model注冊(cè)。當(dāng)Model發(fā)生變化時(shí),Model會(huì)遍歷所有注冊(cè)的觀察者并通知他們相關(guān)的變化。這種方法通常被稱為“發(fā)布 - 訂閱”。Model從不需要關(guān)于任何View的任何信息。事實(shí)上,在Controller需要被告知Model變化的情況下(例如,啟用或禁用菜單選項(xiàng)),所有Controller必須通過實(shí)現(xiàn)Observer接口并訂閱Model的變化。

iOS開發(fā)幾個(gè)架構(gòu)的對(duì)比

傳統(tǒng)版MVC

上述主動(dòng)型Model MVC模式通過加入Observer模式進(jìn)行了改良。事實(shí)上,隨著業(yè)務(wù)需求的變化,MVC模式通過不斷加入一些更基本的設(shè)計(jì)模式采演化成現(xiàn)在經(jīng)典的MVC模式。這些基本模式協(xié)同工作,定義了MVC應(yīng)用程序特有的功能分離和通信路徑。

iOS開發(fā)幾個(gè)架構(gòu)的對(duì)比

上圖所示為傳統(tǒng)MVC設(shè)計(jì)模式,其通過Composition、Strategy、Observer等基本設(shè)計(jì)模式協(xié)同工作以實(shí)現(xiàn)。用戶操作在復(fù)合結(jié)構(gòu)的某個(gè)層次上操作View,生成一個(gè)事件。Controller接收事件,并進(jìn)行解釋。這個(gè)過程使用Strategy模式實(shí)現(xiàn),可以是通過消息請(qǐng)求一個(gè)Model對(duì)象來更新其狀態(tài)或請(qǐng)求一個(gè)View對(duì)象來更新其行為或外觀。Model對(duì)象則在其狀態(tài)改變時(shí)通知所有已注冊(cè)為觀察者的對(duì)象。如果觀察者是對(duì)象,則可以相應(yīng)更新其外觀。

蘋果版MVC

蘋果認(rèn)為傳統(tǒng)的MVC模式中,View通過Observer模式直接觀察Model對(duì)象以獲取相關(guān)的通知,而這樣的設(shè)計(jì)會(huì)導(dǎo)致View和Model對(duì)象不能被廣泛復(fù)用,因?yàn)閂iew與其觀察的Model之間存在耦合關(guān)系。因此,蘋果版MVC與傳統(tǒng)MVC基本一致,只是隔離了View和Model。

iOS開發(fā)幾個(gè)架構(gòu)的對(duì)比

在iOS中,UIViewController和UIView是一一對(duì)應(yīng)的。隨著業(yè)務(wù)的深入,MVC最終一點(diǎn)點(diǎn)變成了Massive-View-Controller。

iOS開發(fā)幾個(gè)架構(gòu)的對(duì)比

MVP

MVP(Modell-View-Presenter)模式就是為了解決MVC中Controller越來越臃腫的問題,進(jìn)一步明確代碼分工。MVP與蘋果版MVC非常相似,但是它們的從屬關(guān)系有所不同(實(shí)線表示持有)。如下圖所示,MVP模式中View持有Presenter,Presenter持有Model,View不能直接訪問Model;而MVC模式中Controller持有View和Model。

通過修改從屬關(guān)系,可以真正意義上實(shí)現(xiàn)將UI邏輯和數(shù)據(jù)邏輯隔離,而隔離之后就可以方便地對(duì)數(shù)據(jù)邏輯部分進(jìn)行單元測(cè)試。

iOS開發(fā)幾個(gè)架構(gòu)的對(duì)比

在iOS中,MVP的實(shí)現(xiàn)一般如下圖所示。

iOS開發(fā)幾個(gè)架構(gòu)的對(duì)比

MVVM

MVVM(Model View View-Model)就是為了解決MVP中Presenter過于臃腫的問題。MVVM的思想是將Controller中UI控制邏輯與業(yè)務(wù)邏輯進(jìn)行分離,并抽離出一個(gè)View-Model來完成UI控制的邏輯。而Controller只需要負(fù)責(zé)業(yè)務(wù)邏輯即可。如下圖便是MVVM的結(jié)構(gòu)圖。

iOS開發(fā)幾個(gè)架構(gòu)的對(duì)比

通常,View-Model可以調(diào)用Model定義的方法,從Model中獲取數(shù)據(jù)以用于View,并對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,使View可以直接使用。View又可以向View-Model發(fā)出用戶的操作命令,從而更改Model。MVVM實(shí)現(xiàn)了一種雙向綁定機(jī)制。

在iOS中,MVVM的實(shí)現(xiàn)一般如下圖所示。

iOS開發(fā)幾個(gè)架構(gòu)的對(duì)比

MVVM的優(yōu)點(diǎn)在于:降低了View和Model之間的耦合;分離了業(yè)務(wù)邏輯和視圖邏輯。缺點(diǎn)在于:View和Model雙向綁定導(dǎo)致bug難以定位,兩者中的任何一方出現(xiàn)問題,另一方也會(huì)出現(xiàn)問題;增加了膠水代碼。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • iOS
    iOS
    +關(guān)注

    關(guān)注

    8

    文章

    3401

    瀏覽量

    155554
  • 架構(gòu)
    +關(guān)注

    關(guān)注

    1

    文章

    533

    瀏覽量

    26613
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    工程師之夜系列分享第三十九篇:Kafka、RocketMQ、JMQ 存儲(chǔ)架構(gòu)深度對(duì)比

    開源,金融級(jí)特性突出)、JMQ(京東開源,側(cè)重高可用與靈活性),從存儲(chǔ)模型、數(shù)據(jù)組織、索引設(shè)計(jì)等維度展開深度對(duì)比,為技術(shù)選型與架構(gòu)優(yōu)化提供參考。? 本文將從概念辨析出發(fā),系統(tǒng)拆解主流存儲(chǔ)模型與存儲(chǔ)引擎的設(shè)計(jì)邏輯,對(duì)比 JMQ、K
    的頭像 發(fā)表于 01-13 16:19 ?227次閱讀
    工程師之夜系列分享第三十九篇:Kafka、RocketMQ、JMQ 存儲(chǔ)<b class='flag-5'>架構(gòu)</b>深度<b class='flag-5'>對(duì)比</b>

    常見 MCU 開發(fā)環(huán)境對(duì)比:Keil、IAR、VS Code 該選誰?

    開發(fā)環(huán)境對(duì)比表,幫助你快速掌握。01STM32系列主要IDE:STM32CubeIDE、KeilMDK、IAREWARM特點(diǎn):官方支持STM32CubeMX生成初
    的頭像 發(fā)表于 01-09 19:03 ?1505次閱讀
    常見 MCU <b class='flag-5'>開發(fā)</b>環(huán)境<b class='flag-5'>對(duì)比</b>:Keil、IAR、VS Code 該選誰?

    常用 MCU 架構(gòu)對(duì)比:ARM、AVR、PIC、RISC-V

    在嵌入式開發(fā)中,選擇合適的MCU架構(gòu)往往決定了項(xiàng)目開發(fā)效率和最終產(chǎn)品性能。市面上MCU架構(gòu)繁多,每種架構(gòu)在指令集、性能、功耗、外設(shè)支持和生態(tài)
    的頭像 發(fā)表于 11-17 10:54 ?1851次閱讀
    常用 MCU <b class='flag-5'>架構(gòu)</b><b class='flag-5'>對(duì)比</b>:ARM、AVR、PIC、RISC-V

    20個(gè)低代碼開發(fā)平臺(tái)多維度對(duì)比:解鎖企業(yè)應(yīng)用開發(fā)新動(dòng)能

    一、行業(yè)痛點(diǎn)剖析 1.1 開發(fā)周期冗長 在傳統(tǒng)應(yīng)用開發(fā)模式下,一個(gè)完整的項(xiàng)目從需求分析階段開始,便需要投入大量時(shí)間。開發(fā)團(tuán)隊(duì)要與業(yè)務(wù)部門反復(fù)溝通,梳理出詳盡的需求文檔,這個(gè)過程往往會(huì)因雙方理解
    的頭像 發(fā)表于 11-05 17:04 ?729次閱讀

    ADI建議電源開發(fā)優(yōu)先考慮電源架構(gòu)的優(yōu)化

    電源開發(fā)的另一個(gè)關(guān)鍵點(diǎn)是定義電源架構(gòu)或創(chuàng)建電源樹。完整的系統(tǒng)電源通常需要多個(gè)電源轉(zhuǎn)換器,而且往往需要多個(gè)不同的電壓。為此,有多種方法可達(dá)到目的??梢允褂秒娫?b class='flag-5'>架構(gòu)工具(例如ADI的LTpowerPlanner ? )來計(jì)算并清楚表
    的頭像 發(fā)表于 08-18 17:28 ?3876次閱讀
    ADI建議電源<b class='flag-5'>開發(fā)</b>優(yōu)先考慮電源<b class='flag-5'>架構(gòu)</b>的優(yōu)化

    低功耗單片機(jī)各型號(hào)的對(duì)比及選型參考

    不同品牌、不同系列的低功耗單片機(jī)在功耗控制、性能表現(xiàn)、外設(shè)配置等方面各有特點(diǎn),通過低功耗單片機(jī)各型號(hào)的對(duì)比,能幫助開發(fā)者更精準(zhǔn)地匹配應(yīng)用需求。本文將圍繞主流低功耗單片機(jī)型號(hào)展開對(duì)比,并介紹在單片機(jī)
    的頭像 發(fā)表于 07-22 18:25 ?1523次閱讀

    主流機(jī)器視覺軟件開發(fā)平臺(tái)介紹及對(duì)比?

    機(jī)器視覺作為工業(yè)自動(dòng)化的核心技術(shù),其軟件開發(fā)平臺(tái)的選擇直接影響項(xiàng)目的開發(fā)效率、成本及最終性能。本文將對(duì)比當(dāng)前主流的視覺開發(fā)平臺(tái),包括LabVIEW、VisionPro、Halcon
    的頭像 發(fā)表于 07-14 09:44 ?2652次閱讀
    主流機(jī)器視覺軟件<b class='flag-5'>開發(fā)</b>平臺(tái)介紹及<b class='flag-5'>對(duì)比</b>?

    【中科昊芯Core_DSC280025C開發(fā)板試用體驗(yàn)】+2.RAM工程與FLASH工程對(duì)比

    前言 大家好,非常感謝電子發(fā)燒友與中科昊芯提供的DSC280025C開發(fā)板,這是一款DSP的開發(fā)板,基于RISC-V指令架構(gòu)。 在開發(fā)DSP的芯片的時(shí)候,要分代碼運(yùn)行在RAM模式和Fl
    發(fā)表于 07-04 10:37

    同一水平的 RISC-V 架構(gòu)的 MCU,和 ARM 架構(gòu)的 MCU 相比,運(yùn)行速度如何?

    ARM 架構(gòu)與 RISC-V 架構(gòu)的 MCU 在同一性能水平下的運(yùn)行速度對(duì)比,需從架構(gòu)設(shè)計(jì)原點(diǎn)、指令集特性及實(shí)際測(cè)試數(shù)據(jù)展開剖析。以 ARM Cortex-M33 這類 ARMv8M
    的頭像 發(fā)表于 07-02 10:29 ?1535次閱讀
    同一水平的 RISC-V <b class='flag-5'>架構(gòu)</b>的 MCU,和 ARM <b class='flag-5'>架構(gòu)</b>的 MCU 相比,運(yùn)行速度如何?

    【HarmonyOS Next】ArkUI-X休閑益智接水果【進(jìn)階】

    本文通過ArkUI-X實(shí)現(xiàn)跨平臺(tái)接水果游戲,深入探究網(wǎng)絡(luò)圖片在HarmonyOS與iOS設(shè)備上的渲染差異,并提供專業(yè)級(jí)優(yōu)化方案。基于WebView的混合架構(gòu),我們實(shí)現(xiàn)了單代碼庫雙端適配的高效開發(fā)
    發(fā)表于 06-28 22:14

    主流版本控制工具Git vs Perforce P4:架構(gòu)模式、性能、大文件管理及分支管理對(duì)比詳解

    Git vs Perforce P4,如何選型?架構(gòu)模式、性能、大文件管理、分支策略四大維度對(duì)比,幫你全面了解兩者的核心差異,選擇更合適你團(tuán)隊(duì)需求的版本控制系統(tǒng)。
    的頭像 發(fā)表于 06-13 14:52 ?842次閱讀
    主流版本控制工具Git vs Perforce P4:<b class='flag-5'>架構(gòu)</b>模式、性能、大文件管理及分支管理<b class='flag-5'>對(duì)比</b>詳解

    知識(shí)分享 | 評(píng)估模型架構(gòu)——如何實(shí)現(xiàn)?

    確保良好的模型架構(gòu)對(duì)于開發(fā)安全和可靠的軟件非常重要。本文為您介紹MES Model Examiner? (MXAM)如何優(yōu)化模型架構(gòu),簡化復(fù)雜度管理步驟,并最終提升軟件質(zhì)量。
    的頭像 發(fā)表于 06-05 11:46 ?681次閱讀
    知識(shí)分享 | 評(píng)估模型<b class='flag-5'>架構(gòu)</b>——如何實(shí)現(xiàn)?

    技術(shù)分享 | 如何在2k0300(LoongArch架構(gòu))處理器上跑通qt開發(fā)流程

    技術(shù)分享 | 如何在2k0300開發(fā)板(LoongArch架構(gòu))處理器上跑通qt開發(fā)流程
    的頭像 發(fā)表于 05-20 11:05 ?940次閱讀
    技術(shù)分享 | 如何在2k0300(LoongArch<b class='flag-5'>架構(gòu)</b>)處理器上跑通qt<b class='flag-5'>開發(fā)</b>流程

    CY7C65215使用IOS中的USB CDC UART類驅(qū)動(dòng)程序是否可以與IOS一起工作?

    我知道 CY7C65215 沒有適用于 IOS 的驅(qū)動(dòng)程序。但是,使用 IOS 中的 USB CDC UART 類驅(qū)動(dòng)程序是否可以與 IOS 一起工作? 我們正在考慮在我們的設(shè)備中安裝 CY7C65215 而不是 FTDI US
    發(fā)表于 04-30 07:57

    請(qǐng)問TapLinx IOS SDK與Xcode 16不兼容嗎?

    ]/taplinxlibrary/taplinxlibrary.swiftmodule/arm64-apple-ios.swiftmodule 清理 Build / 刪除 DerivedData 目錄,然后
    發(fā)表于 04-02 06:19