在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    MVC 死了,接下來會(huì)發(fā)生什么?

    在本系列的開始部分,我們將看到像 React.js 這樣的 UI 框架是如何引入一種替代方法,來取代使用 MVC 作為設(shè)計(jì) Web 應(yīng)用程序和 UI 的主要方法的。請(qǐng)繼續(xù)閱讀,了解更多信息。

    Js、 Elm、 Cycle.js 和其他 UI 框架引入了一種構(gòu)建用戶界面的新方法。從函數(shù)式反應(yīng)型編程到用戶界面開發(fā),它們甚至改變了我們對(duì)用戶界面的看法。這些方法很快就打破了 MVC 及其兄弟(MVP、 MVVM 等)看似不可避免的統(tǒng)治地位。本文是系列文章的第一篇,將簡(jiǎn)要介紹這種構(gòu)建 UI 的新方法,并列出它與傳統(tǒng)方法相比的一些優(yōu)點(diǎn)。這些因素是如此強(qiáng)大,以至于在我看來,我們現(xiàn)在很有可能正在見證 MVC 時(shí)代的終結(jié)。

    功能性反應(yīng)用戶界面開發(fā)的概念

    從表面上看,像 React.js 這樣帶有 Redux 架構(gòu)、 Elm 和 Cycle.js 的框架似乎完全不同。Redux 應(yīng)用程序最初看起來類似于普通的 JavaScript 應(yīng)用程序,可能主要關(guān)注函數(shù)式編程。Elm 應(yīng)用程序有自己的語言,而 Cycle.js 應(yīng)用程序只由反應(yīng)流組成,這些反應(yīng)流以驚人的方式結(jié)合在一起。

    但是在表面之下,所有這些框架都有一個(gè)共同點(diǎn): 功能性反應(yīng)式 UI 開發(fā)的本質(zhì)。

    上面的圖片大致概述了這些概念,它們?cè)趲缀跛信囵B(yǎng)響應(yīng)式編程的現(xiàn)代用戶界面框架之間共享。首先要注意的是,所有的事情——所有的變化、事件和更新——都朝著一個(gè)方向流動(dòng),形成一個(gè)循環(huán)。這篇文章將給出一個(gè)簡(jiǎn)短的周期解釋,而后面的文章將進(jìn)入更多的細(xì)節(jié)。

    函數(shù)式反應(yīng)式 UI 開發(fā)

    這個(gè)循環(huán)由四個(gè)數(shù)據(jù)結(jié)構(gòu)(State、 Virtual DOM、 Event 和 Action)和四個(gè)組件(View ()-Function、 DOM-Driver、 ActionCreator 和 Updater)組成。DOM-Driver 由框架提供,而其他組件必須由應(yīng)用程序開發(fā)人員實(shí)現(xiàn)。

    假設(shè)我們的應(yīng)用程序 todo-list 已經(jīng)運(yùn)行了一段時(shí)間,用戶按下按鈕在 todo-list 中創(chuàng)建一個(gè)新條目。這將導(dǎo)致 DOM 中的按鈕單擊事件,DOM-Driver 捕獲該事件并將其轉(zhuǎn)發(fā)給我們的 ActionCreators 之一。

    ActionCreator 獲取 DOM 事件并將其映射到操作。操作是命令模式的一個(gè)實(shí)現(xiàn),也就是說,它們描述了應(yīng)該做什么,但是它們本身不修改任何東西。在我們的示例中,我們創(chuàng)建一個(gè) AddToDoItemAction 并將其傳遞給 Updater。

    Updater 包含應(yīng)用程序邏輯。它保持對(duì)應(yīng)用程序當(dāng)前狀態(tài)的引用。每次它從 ActionCreators 之一接收到一個(gè)操作時(shí),都會(huì)生成新的狀態(tài)。在我們的示例中,如果當(dāng)前狀態(tài)包含三個(gè) todo-item 并且我們收到 AddToDoItemAction,Updater 將創(chuàng)建一個(gè)新狀態(tài),其中包含現(xiàn)有 todo-item 和一個(gè)新狀態(tài)。

    狀態(tài)被傳遞給 View ()-Function,它創(chuàng)建所謂的 VirtualDOM。顧名思義,Virtual DOM 并不是真正的 DOM,而是一種描述 DOM 應(yīng)該是什么樣子的數(shù)據(jù)結(jié)構(gòu)。上面的代碼片段顯示了一個(gè)簡(jiǎn)單的 的 Virtual DOM 示例。稍后的文章將詳細(xì)解釋 VirtualDOM 及其優(yōu)點(diǎn)。

    VirtualDOM 被傳遞給 DOM-Driver,后者將更新 DOM 并等待下一個(gè)用戶輸入。有了這個(gè),這個(gè)循環(huán)就結(jié)束了。

    好處

    功能性反應(yīng)式 UI 開發(fā)相對(duì)于傳統(tǒng)方法有三個(gè)主要的優(yōu)勢(shì),它們都是巨大的優(yōu)勢(shì): 直接的測(cè)試、全面的事件流和時(shí)間旅行(是的,真的)。

    簡(jiǎn)單的測(cè)試

    View ()-Function 和 ActionCreators 是簡(jiǎn)單的映射,而 Updater 對(duì)它接收到的 Actions 執(zhí)行折疊(通常也稱為 reduce)。

    所有組件都是純函數(shù),純函數(shù)非常容易測(cè)試。

    純函數(shù)的結(jié)果只取決于輸入?yún)?shù),它們沒有任何副作用。要測(cè)試一個(gè)純函數(shù),只需創(chuàng)建輸入?yún)?shù)、運(yùn)行“測(cè)試中的函數(shù)”并比較結(jié)果即可。沒有樣機(jī),沒有依賴注入,沒有復(fù)雜的設(shè)置,沒有其他技術(shù)是必要的,沒有樂趣的測(cè)試。

    綜合事件流

    響應(yīng)式編程有很多樂趣——除非它不是。圖形用戶界面的控制流本質(zhì)上是基于事件的。應(yīng)用程序必須對(duì)來自用戶或服務(wù)器的按鈕單擊、鍵盤輸入和其他事件作出反應(yīng)。應(yīng)用反應(yīng)技術(shù),無論是觀察者模式、數(shù)據(jù)綁定還是反應(yīng)流,都是自然而然的。

    不幸的是,這些技術(shù)都是有代價(jià)的。如果組件 A 調(diào)用組件 B,則很容易在 IDE 或調(diào)試器中查看連接。但是,如果兩個(gè)組件通過事件連接起來,那么這種關(guān)系就不那么明顯了。應(yīng)用程序變得越大,就越難理解其內(nèi)部結(jié)構(gòu)。

    功能性反應(yīng)應(yīng)用程序的體系結(jié)構(gòu)通過定義所有組件都必須遵循的簡(jiǎn)單事件流來避免這些問題。

    無論應(yīng)用程序的規(guī)模有多大,事件流永遠(yuǎn)不會(huì)改變。

    時(shí)間旅行

    功能性反應(yīng)式應(yīng)用程序允許您在時(shí)間上來回旅行——至少在應(yīng)用程序的上下文中是如此。如果我們存儲(chǔ)初始狀態(tài)和所有操作,我們可以使用一種稱為“事件采購(gòu)”的技術(shù)。通過重播操作,我們可以重新計(jì)算應(yīng)用程序所處的每個(gè)狀態(tài)。如果我們只重播最后的 n-1,n-2,n-3… 動(dòng)作,我們實(shí)際上可以回到過去。通過修改記錄的行動(dòng)流,同時(shí)應(yīng)用它們,我們甚至可以改變過去。正如您可以想象的那樣,這在開發(fā)和修復(fù)錯(cuò)誤時(shí)非常方便。

    第一個(gè)時(shí)間旅行調(diào)試器已經(jīng)建立,但我認(rèn)為我們才剛剛開始了解的可能性,更驚人的工具將在未來發(fā)布。

    摘要

    到目前為止,我們只觸及了功能性反應(yīng)式 UI 開發(fā)的表面,但是到目前為止,應(yīng)該很清楚這種方法具有一些巨大的優(yōu)勢(shì)。以后的文章將更深入地討論技術(shù)細(xì)節(jié),但也會(huì)展示其缺點(diǎn)(或者我們稱之為“尚未解決的挑戰(zhàn)”) ,并展示如何將所學(xué)到的經(jīng)驗(yàn)教訓(xùn)應(yīng)用于 JavaFX 應(yīng)用程序的示例。

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
    用戶投稿
    上一篇 2022年6月28日 00:43
    下一篇 2022年6月28日 00:43

    相關(guān)推薦

    • 短視頻策劃內(nèi)容的3個(gè)要點(diǎn)(短視頻策劃內(nèi)容怎么做)

      短視頻在制作時(shí),內(nèi)容框架非常重要。如果直奔主題,然后結(jié)束,聚卓告訴你,這樣的短視頻已經(jīng)過時(shí)了?,F(xiàn)在的短視頻需要框架的,但不是任何框架,它需要一種易于理解和消化的框架。而且,現(xiàn)在大多…

      2022年11月27日
    • 存儲(chǔ)過程語法(sql server存儲(chǔ)過程語法)

      今天小編給各位分享存儲(chǔ)過程語法的知識(shí),其中也會(huì)對(duì)sql server存儲(chǔ)過程語法進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧! oracle存儲(chǔ)過程基本語法…

      2022年11月26日
    • 全民K歌升級(jí)新版本7.0之后,有哪些隱藏功能?

      作者:高百烈來源:知乎 這個(gè)功能,舊版并沒有,要升級(jí)到全新的全民K歌7.0版本才能發(fā)現(xiàn)。 作為朋友圈當(dāng)代K歌之王,我費(fèi)了不少功夫才搶到內(nèi)測(cè)版本。有一說一,全民K歌的路子真的很野,新…

      2022年11月25日
    • 上手Reno8 Pro體驗(yàn)跨屏互聯(lián) 實(shí)在太方便!

      11月已經(jīng)來到了月底,在手機(jī)品牌又要推出新一年度的新品手機(jī)之前,我們來點(diǎn)評(píng)一下今年令人驚喜的產(chǎn)品。如OPPO的Reno8 Pro系列,該系列搭載雙芯影像配置獲得了很多消費(fèi)者的認(rèn)可。…

      2022年11月25日
    • 淘寶直播開通后帶貨鏈接怎么做(淘寶直播需要開通淘寶店鋪嗎)

      直播帶貨無論是對(duì)于商家來說還是主播收益都是非??捎^的,所以不少平臺(tái)都有直播帶貨功能,一些小伙伴也想加入淘寶直播,那么淘寶直播開通后帶貨鏈接怎么做?下面小編為大家?guī)硖詫氈辈ラ_通后帶…

      2022年11月24日
    • 事件營(yíng)銷案例

      篇一成功營(yíng)銷案例小故事成功銷售案例小故事篇1模仿 一個(gè)人想做一套家具,就走到樹林里砍倒一棵樹,并動(dòng)手把它鋸成木板這個(gè)人鋸樹的時(shí)候,把樹干的一頭擱在樹墩上,自己騎在樹干上還往鋸開的縫…

      2022年11月24日
    • 華為手機(jī)怎么掃一掃連接wifi(手機(jī)掃一掃在哪里)

      手機(jī)瀏覽器可以用來瀏覽網(wǎng)頁、看新聞、看視頻,還能搜索問題,在我們的工作生活中瀏覽器占據(jù)著非常重要的位置。手機(jī)瀏覽器除了這些作用,其實(shí)它隱藏著其他功能,比如:掃一掃。掃一掃可不只是用…

      2022年11月24日
    • 新版找不到切換農(nóng)村淘寶(現(xiàn)在怎么找不到農(nóng)村淘寶了)

      2017年農(nóng)村淘寶APP升級(jí)為手機(jī)淘寶家鄉(xiāng)版,于是手機(jī)淘寶就分為兩個(gè)版本,一個(gè)家鄉(xiāng)版和標(biāo)準(zhǔn)版。今年五一假期一過淘寶又發(fā)出新公告將陸續(xù)升級(jí)! 左邊為標(biāo)準(zhǔn)版,右邊為家鄉(xiāng)版 據(jù)公告,升級(jí)…

      2022年11月24日
    • 三星手機(jī)截屏(三星手機(jī)截屏圖片在哪個(gè)文件夾)

      本文主要講的是三星手機(jī)截屏,以及和三星手機(jī)截屏圖片在哪個(gè)文件夾相關(guān)的知識(shí),如果覺得本文對(duì)您有所幫助,不要忘了將本文分享給朋友。 三星手機(jī)截屏怎么截 三星手機(jī)四種截屏方法 1、普通截…

      2022年11月24日
    • 英特爾推出按需付費(fèi)芯片授權(quán)服務(wù) 針對(duì)新至強(qiáng)處理器

      此前有消息傳出,英特爾將針對(duì)服務(wù)器芯片推出全新的付費(fèi)解鎖功能服務(wù)?,F(xiàn)在,英特爾已經(jīng)正式公布了這一服務(wù),名為“Intel On Demand”,旨在為客戶“提供靈活的消費(fèi)功能以及根據(jù)…

      2022年11月23日

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息