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)不再提示

MVC架構(gòu)模式為什么悄然消失了

汽車玩家 ? 來(lái)源:今日頭條 ? 作者:令狐沖學(xué)Java ? 2020-04-12 19:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

投身IT江湖,就像打王者榮耀一樣,好不容易練會(huì)了一個(gè)硬性,結(jié)果天美把它削弱了,你不得不再去練習(xí)一個(gè)。

MVC這門技術(shù)伴隨著我的成長(zhǎng),感情和Java一樣深厚,但是,最近兩年卻不得不和MVC說(shuō)再見(jiàn)了。是的,不是Struts沒(méi)了,也不是SpringMVC沒(méi)了,而是MVC這種架構(gòu)模式被淘汰了。當(dāng)時(shí)代拋棄你時(shí),連一聲再見(jiàn)都不會(huì)說(shuō)。所以,看到這篇文章的各位程序員兄弟們,緊跟技術(shù)發(fā)展趨勢(shì),再牛逼一點(diǎn)的,能夠提前預(yù)見(jiàn)技術(shù)趨勢(shì),提前準(zhǔn)備,最牛逼的,引領(lǐng)技術(shù)趨勢(shì),咳咳,想的有點(diǎn)多。

我們先回顧一下MVC吧,就像懷念一個(gè)老朋友。

MVC模式(Model–view–controller)是軟件工程中的一種軟件架構(gòu)模式,把軟件系統(tǒng)分為三個(gè)基本部分:模型(Model)、視圖(View)和控制器(Controller)。( 摘自 維基百科-MVC )

模型(Model)用于封裝與應(yīng)用程序的業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù)以及對(duì)數(shù)據(jù)的處理方法?!?Model ”有對(duì)數(shù)據(jù)直接訪問(wèn)的權(quán)力,“Model”不依賴“View”和“Controller”,Model 不關(guān)心它會(huì)被如何顯示或是如何被操作。但是 Model 中數(shù)據(jù)的變化一般會(huì)通過(guò)一種刷新機(jī)制被公布。為了實(shí)現(xiàn)這種機(jī)制,那些用于監(jiān)視此 Model 的 View 必須事先在此 Model 上注冊(cè),從而,View 可以了解在數(shù)據(jù) Model 上發(fā)生的改變。

視圖(View)能夠?qū)崿F(xiàn)數(shù)據(jù)有目的的顯示。在 View 中一般沒(méi)有程序上的邏輯。為了實(shí)現(xiàn) View 上的刷新功能,View 需要訪問(wèn)它監(jiān)視的數(shù)據(jù)模型(Model),因此應(yīng)該事先在被它監(jiān)視的數(shù)據(jù)那里注冊(cè)。

控制器(Controller)起到不同層面間的組織作用,用于控制應(yīng)用程序的流程。它處理事件并作出響應(yīng)?!笆录卑ㄓ脩舻男袨楹蛿?shù)據(jù) Model 上的改變。

Struts和SpringMVC曾經(jīng)是MVC雙雄。

那是什么導(dǎo)致MVC模式被淘汰了呢?移動(dòng)時(shí)代的到來(lái),展示端愈來(lái)愈重要,所以前端技術(shù)發(fā)展越來(lái)越猛烈,前端工程師也不再是團(tuán)隊(duì)的小弟了,他們要求和Java工程師平等對(duì)話。

前后端分離來(lái)了,Node.js來(lái)了,前端工程師把MVC的職責(zé)都給搶走了,后端工程師真正成為了后端,只需要提供API給前端就行,再也不用關(guān)心redirectforward有什么區(qū)別,再也不用關(guān)心session、cookies有什么區(qū)別,怎么樣。當(dāng)前端工程師拿走M(jìn)VC的職責(zé)之后,自然會(huì)把MVC模式改成更適合前端的模式:MVVM。

MVVM(Model–View–Viewmodel)也是一種軟件架構(gòu)模式,它必將取代MVC,或者說(shuō)的好聽(tīng)一些,它是MVC基礎(chǔ)上演化而來(lái)。

MVC中的M就是單純的從網(wǎng)絡(luò)獲取回來(lái)的數(shù)據(jù)模型,V指的我們的視圖界面,而C就是我們的ViewController。

在其中,ViewController負(fù)責(zé)View和Model之間調(diào)度,View發(fā)生交互事件會(huì)通過(guò)target-action或者delegate方式回調(diào)給ViewController,與此同時(shí)ViewController還要承擔(dān)把Model通過(guò)KVO、Notification方式傳來(lái)的數(shù)據(jù)傳輸給View用于展示的責(zé)任。隨著業(yè)務(wù)越來(lái)越復(fù)雜,視圖交互越復(fù)雜,導(dǎo)致Controller越來(lái)越臃腫,負(fù)重前行。臟活累活都它干了,到頭來(lái)還一點(diǎn)不討好。福報(bào)修多了的結(jié)果就是,不行了就重構(gòu)你,重構(gòu)不了就換掉你。

來(lái)一張斯坦福老頭經(jīng)典的MVC架構(gòu)圖。

所以為了解決這個(gè)問(wèn)題,MVVM就閃亮登場(chǎng)了。他把View和Contrller都放在了View層(相當(dāng)于把Controller一部分邏輯抽離了出來(lái)),Model層依然是服務(wù)端返回的數(shù)據(jù)模型。而ViewModel充當(dāng)了一個(gè)UI適配器的角色,也就是說(shuō)View中每個(gè)UI元素都應(yīng)該在ViewModel找到與之對(duì)應(yīng)的屬性。除此之外,從Controller抽離出來(lái)的與UI有關(guān)的邏輯都放在了ViewModel中,這樣就減輕了Controller的負(fù)擔(dān)。

這張圖是從網(wǎng)上找的,MVVM還在學(xué)習(xí)階段,后續(xù)補(bǔ)一張自己的

從以上的架構(gòu)圖中,我們可以很清晰的梳理出各自的分工。

View層:視圖展示。包含UIView以及UIViewController,View層是可以持有ViewModel的。

ViewModel層:視圖適配器。暴露屬性與View元素顯示內(nèi)容或者元素狀態(tài)一一對(duì)應(yīng)。一般情況下ViewModel暴露的屬性建議是readOnly的,至于為什么,我們?cè)趯?shí)戰(zhàn)中會(huì)去解釋。還有一點(diǎn),ViewModel層是可以持有Model的。

Model層:數(shù)據(jù)模型與持久化抽象模型。數(shù)據(jù)模型很好理解,就是從服務(wù)器拉回來(lái)的JSON數(shù)據(jù)。而持久化抽象模型暫時(shí)放在Model層,是因?yàn)镸VVM誕生之初就沒(méi)有對(duì)這塊進(jìn)行很細(xì)致的描述。按照經(jīng)驗(yàn),我們通常把數(shù)據(jù)庫(kù)、文件操作封裝成Model,并對(duì)外提供操作接口。(有些公司把數(shù)據(jù)存取操作單拎出來(lái)一層,稱之為DataAdapter層,所以在業(yè)內(nèi)會(huì)有很多MVVM的變種,但其本質(zhì)上都是MVVM)。

Binder:MVVM的靈魂。可惜在MVVM這幾個(gè)英文單詞中并沒(méi)有它的一席之地,它的最主要作用是在View和ViewModel之間做了雙向數(shù)據(jù)綁定。如果MVVM沒(méi)有Binder,那么它與MVC的差異不是很大。

總結(jié)來(lái)說(shuō),MVC模式本來(lái)是完美的,但是隨著移動(dòng)時(shí)代的到來(lái),前端數(shù)據(jù)展示、交互、跳轉(zhuǎn)變得復(fù)雜了,Controller的只能真的不適合在放到后端了,所以MVVM就出現(xiàn)了。

后面的文章中會(huì)繼續(xù)闡述MVVM、SPA等前端的架構(gòu)模型,就像練一個(gè)天美的新英雄一樣。

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

    關(guān)注

    20

    文章

    3001

    瀏覽量

    116430
  • MVC
    MVC
    +關(guān)注

    關(guān)注

    0

    文章

    73

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    Redis哨兵模式的自動(dòng)故障檢測(cè)與主從切換實(shí)戰(zhàn)

    Redis 主從復(fù)制解決讀擴(kuò)展和數(shù)據(jù)冗余問(wèn)題,但主節(jié)點(diǎn)故障時(shí)需要人工介入切換,這在生產(chǎn)環(huán)境中是不可接受的。Sentinel(哨兵)模式在主從架構(gòu)之上增加了自動(dòng)故障檢測(cè)和故障轉(zhuǎn)移能力,是 Redis 高可用的標(biāo)準(zhǔn)方案之一。
    的頭像 發(fā)表于 02-27 11:05 ?127次閱讀

    LAT1199+TrustZone 架構(gòu)下使用 LPBAM 導(dǎo)致的 HardFault應(yīng)用筆記

    客戶在 Nucleo-U575ZI 開(kāi)發(fā)板上使用 TrustZone 架構(gòu),測(cè)試 LPBAM 功能。首先使能 TrustZone 架構(gòu),然后將 LPGPIO 映射到了非安全區(qū),并且配置
    發(fā)表于 01-11 17:23 ?0次下載

    芯源MCU架構(gòu)是不是基本都是ARM架構(gòu)?還有其他的架構(gòu)嗎?

    芯源MCU架構(gòu)是不是基本都是ARM架構(gòu)?還有其他的架構(gòu)嗎?
    發(fā)表于 11-20 06:21

    浮點(diǎn)舍入模式介紹(六)

    模式(Rounding Mode), RISC-V 架構(gòu)浮點(diǎn)運(yùn)算的舍入模式可以通過(guò)兩種方式指定。 (1)靜態(tài)舍入模式:浮點(diǎn)指令的編碼中有3位作為舍入
    發(fā)表于 10-24 07:57

    yaffs文件系統(tǒng)能掛載成功,掉電消失,為什么?

    上電會(huì)消失。 代碼里創(chuàng)建文件夾卻失敗。顯示錯(cuò)誤,返回值-28. 求助大佬。NAND Flash型號(hào)是MT29F64G08AFAAAWP。stm32f407。
    發(fā)表于 10-13 07:50

    什么是ARM架構(gòu)?你需要知道的一切

    從智能手機(jī)到工業(yè)邊緣計(jì)算機(jī),ARM?架構(gòu)為全球數(shù)十億臺(tái)設(shè)備提供動(dòng)力。ARM?以其效率優(yōu)先的設(shè)計(jì)和靈活的許可模式而聞名,已迅速?gòu)囊苿?dòng)處理器擴(kuò)展到人工智能邊緣計(jì)算、工業(yè)控制器,甚至數(shù)據(jù)中心。本文我們將
    的頭像 發(fā)表于 09-11 14:48 ?1283次閱讀
    什么是ARM<b class='flag-5'>架構(gòu)</b>?你需要知道的一切

    飛睿UWB超寬帶定位測(cè)距技術(shù),數(shù)字鑰匙重塑智能生活,高精度厘米級(jí)定位無(wú)感解鎖

    鑰匙消失,門卻更懂你。當(dāng)厘米級(jí)定位遇見(jiàn)空間感知,一場(chǎng)從“主動(dòng)操作”到“無(wú)感響應(yīng)”的智能革命已悄然到來(lái)。
    的頭像 發(fā)表于 07-15 15:23 ?1040次閱讀
    飛睿UWB超寬帶定位測(cè)距技術(shù),數(shù)字鑰匙重塑智能生活,高精度厘米級(jí)定位無(wú)感解鎖

    AMD FPGA異步模式與同步模式的對(duì)比

    本文講述AMD UltraScale /UltraScale+ FPGA 原生模式下,異步模式與同步模式的對(duì)比及其對(duì)時(shí)鐘設(shè)置的影響。
    的頭像 發(fā)表于 07-07 13:47 ?1638次閱讀

    Vector全流程開(kāi)發(fā)工具鏈概述

    在軟件定義汽車(SDV)時(shí)代,汽車軟件的復(fù)雜度和重要性顯著提升,開(kāi)發(fā)模式也逐步從基于ECU的獨(dú)立軟件開(kāi)發(fā)向集中化、平臺(tái)化的軟件架構(gòu)演進(jìn)。傳統(tǒng)的開(kāi)發(fā)模式由于硬件與軟件緊耦合,導(dǎo)致升級(jí)難度大、開(kāi)發(fā)周期長(zhǎng)
    的頭像 發(fā)表于 06-17 13:45 ?1151次閱讀
    Vector全流程開(kāi)發(fā)工具鏈概述

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

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

    盾華電子600余盞新型智慧路燈“儲(chǔ)能路燈”悄然落地湖北荊門

    盾華電子600余盞新型智慧路燈“儲(chǔ)能路燈”悄然落地湖北荊門
    的頭像 發(fā)表于 04-10 08:37 ?652次閱讀
    盾華電子600余盞新型智慧路燈“儲(chǔ)能路燈”<b class='flag-5'>悄然</b>落地湖北荊門

    汽車電氣架構(gòu)中的電源架構(gòu)

    隨著汽車電子化、智能化的快速發(fā)展,汽車電氣架構(gòu)(E/E架構(gòu))已成為現(xiàn)代汽車的核心技術(shù)之一。
    的頭像 發(fā)表于 03-29 11:25 ?1000次閱讀

    一種基于點(diǎn)、線和消失點(diǎn)特征的單目SLAM系統(tǒng)設(shè)計(jì)

    本文提出了一種穩(wěn)健的單目視覺(jué)SLAM系統(tǒng),該系統(tǒng)同時(shí)利用點(diǎn)、線和消失點(diǎn)特征來(lái)進(jìn)行精確的相機(jī)位姿估計(jì)和地圖構(gòu)建,有效解決傳統(tǒng)基于點(diǎn)特征的SLAM的局限性。
    的頭像 發(fā)表于 03-21 17:07 ?1051次閱讀
    一種基于點(diǎn)、線和<b class='flag-5'>消失</b>點(diǎn)特征的單目SLAM系統(tǒng)設(shè)計(jì)

    基于SCA的軟件無(wú)線電系統(tǒng)的概念與架構(gòu)

    1 軟件通信體系架構(gòu)SCA的基本概念 SCA:Software Communication Architecture,軟件通信架構(gòu);繼承軟件定義無(wú)線電SDR的核心設(shè)計(jì)思想,構(gòu)造一個(gè)
    的頭像 發(fā)表于 03-20 09:30 ?1932次閱讀
    基于SCA的軟件無(wú)線電系統(tǒng)的概念與<b class='flag-5'>架構(gòu)</b>

    博世GTM IP模塊架構(gòu)介紹

    上篇文章我們介紹博世GTM IP模塊的核心功能及基礎(chǔ)結(jié)構(gòu)模塊。本篇文章將繼續(xù)解析GTM模塊架構(gòu),重點(diǎn)介紹I/O模塊,特殊功能模塊及內(nèi)核模塊。這些模塊不僅增強(qiáng)了GTM的信號(hào)處理能力,還極大提升了系統(tǒng)的靈活性和集成度,能夠滿足汽車
    的頭像 發(fā)表于 03-07 17:50 ?2490次閱讀
    博世GTM IP模塊<b class='flag-5'>架構(gòu)</b>介紹