成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

如何實(shí)現(xiàn)一個(gè)MV*模式(MVC/MVP/MVVM)

Cc_2011 / 1126人閱讀

摘要:首先我們要大概搞清楚一些什么模式。什么模式是等的一個(gè)統(tǒng)稱,它們各有不同,但本質(zhì)上其實(shí)是一個(gè)東西。不關(guān)心它會被如何顯示或是如何被操作。效果圖如下,我們只關(guān)心功能實(shí)現(xiàn),所以樣式丑我們先忍一下。

假如讓你不依托任何前端框架(React/Vue/Angular等等),單純用Javascript編寫一個(gè)網(wǎng)站應(yīng)用,你還知道怎么開發(fā)嗎?

舉個(gè)例子,產(chǎn)品經(jīng)理讓你實(shí)現(xiàn)一個(gè)網(wǎng)頁,上面有一張貓咪的圖片,貓咪的下面顯示點(diǎn)贊的次數(shù)。每次點(diǎn)擊貓咪的圖片,點(diǎn)贊的數(shù)字加一。

這個(gè)對大家來說應(yīng)該都很簡單。

這時(shí)候產(chǎn)品經(jīng)理開始加需求了,網(wǎng)頁上展現(xiàn)五張貓咪圖片,分別有自己的點(diǎn)贊次數(shù),點(diǎn)擊貓咪圖片,相對應(yīng)的點(diǎn)贊次數(shù)加一。這時(shí)候你想怎么改寫自己的程序呢?你的程序現(xiàn)在看起來是否邏輯清楚,結(jié)構(gòu)清晰,可拓展性強(qiáng)呢?

今天我就要帶大家用MV模式來組織代碼,編寫出高質(zhì)量優(yōu)美的前端項(xiàng)目。首先我們要大概搞清楚一些什么MV模式。

什么MV*模式

MV*是MVC/MVP/MVVM等的一個(gè)統(tǒng)稱,它們各有不同,但本質(zhì)上其實(shí)是一個(gè)東西。MVP和MVVM是MVC的變體。所以我們今天不談?wù)撍鼈兊膮^(qū)別,只關(guān)注核心的東西。

M代表的是Model,用于封裝與應(yīng)用程序的業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù)以及對數(shù)據(jù)的處理方法。Model有對數(shù)據(jù)直接訪問的權(quán)力,例如對數(shù)據(jù)庫的訪問。Model 不關(guān)心它會被如何顯示或是如何被操作。

V代表的是View,用于將數(shù)據(jù)有目的的顯示出來,在 View 中一般沒有程序上的邏輯。

最后的*,不管是Controller還是Presenter,還是ViewModel,本質(zhì)上做的事情就是連接M和V,搭建M和V溝通的橋梁。讓M和V不直接溝通,達(dá)到職責(zé)分離的效果。

我們可以看維基百科上一個(gè)極簡的MVC實(shí)現(xiàn):

/** 模擬 Model, View, Controller */
var M = {}, V = {}, C = {};

/** Model 負(fù)責(zé)存放資料 */
M.data = "hello world";

/** View 負(fù)責(zé)將資料顯示到屏幕上 */
V.render = (m) => { alert(m.data); }

/** Controller 作為一個(gè) M 和 V 的橋梁 */
C.handleOnload = () => { V.render(M); }

/** 在網(wǎng)頁讀取的時(shí)候調(diào)用 Controller */
window.onload = C.handleOnload;

我們今天要實(shí)現(xiàn)的MV*就要滿足這幾個(gè)條件:

Model保存我們的數(shù)據(jù)

View負(fù)責(zé)渲染節(jié)點(diǎn),可以有多個(gè)View

*(我們給它取個(gè)名字叫Bridge)為View提供讀取和修改Model的方法

產(chǎn)品經(jīng)理的需求

最終版:網(wǎng)頁左側(cè)展示一個(gè)可選擇的貓咪名字列表,右側(cè)展示當(dāng)前選中的貓咪詳情,包括貓咪名稱,貓咪圖片,該貓咪被點(diǎn)贊數(shù)量和一個(gè)點(diǎn)贊按鈕。點(diǎn)擊點(diǎn)贊按鈕,當(dāng)前貓咪的點(diǎn)贊數(shù)量加1。效果圖如下,我們只關(guān)心功能實(shí)現(xiàn),所以樣式丑我們先忍一下。

HTML && CSS

    placekitten

    文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

    轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/94721.html

    相關(guān)文章

    • 切圖崽的自我修養(yǎng)-[MVVM] Js MV*模式淺談

      摘要:在沒有環(huán)境下對進(jìn)行單元測試的時(shí)候,應(yīng)用邏輯正確性是無法驗(yàn)證的更新的時(shí)候,無法對的更新操作進(jìn)行斷言。對是通過接口進(jìn)行,在對進(jìn)行不依賴環(huán)境的單元測試的時(shí)候。這里根據(jù)上面的例子給出了的單元測試樣例。年微軟工程師在自己的博客上首次公布了模式。 前言 做客戶端開發(fā)、前端開發(fā)對MVC、MVP、MVVM這些名詞不了解也應(yīng)該大致聽過,都是為了解決圖形界面應(yīng)用程序復(fù)雜性管理問題而產(chǎn)生的應(yīng)用架構(gòu)模式。網(wǎng)上...

      bluesky 評論0 收藏0
    • 切圖崽的自我修養(yǎng)-[MVVM] Js MV*模式淺談

      摘要:在沒有環(huán)境下對進(jìn)行單元測試的時(shí)候,應(yīng)用邏輯正確性是無法驗(yàn)證的更新的時(shí)候,無法對的更新操作進(jìn)行斷言。對是通過接口進(jìn)行,在對進(jìn)行不依賴環(huán)境的單元測試的時(shí)候。這里根據(jù)上面的例子給出了的單元測試樣例。年微軟工程師在自己的博客上首次公布了模式。 前言 做客戶端開發(fā)、前端開發(fā)對MVC、MVP、MVVM這些名詞不了解也應(yīng)該大致聽過,都是為了解決圖形界面應(yīng)用程序復(fù)雜性管理問題而產(chǎn)生的應(yīng)用架構(gòu)模式。網(wǎng)上...

      shleyZ 評論0 收藏0
    • MVC,MVP 和 MVVM 模式如何選擇?

      摘要:如何同步的變更。在沒有環(huán)境下對進(jìn)行單元測試的時(shí)候,業(yè)務(wù)邏輯的正確性是無法驗(yàn)證的更新的時(shí)候,無法對的更新操作進(jìn)行斷言。對是通過接口進(jìn)行,在對進(jìn)行不依賴環(huán)境的單元測試的時(shí)候。這里根據(jù)上面的例子給出了的單元測試樣例。 前言 做客戶端開發(fā)、前端開發(fā)對MVC、MVP、MVVM這些名詞不了解也應(yīng)該大致聽過,都是為了解決圖形界面應(yīng)用程序復(fù)雜性管理問題而產(chǎn)生的應(yīng)用架構(gòu)模式。 網(wǎng)上很多文章關(guān)于這方面的討...

      Worktile 評論0 收藏0

    發(fā)表評論

    0條評論

    閱讀需要支付1元查看
    <