AWTK-MVVM有哪些知識點

這篇文章主要講解了“AWTK-MVVM有哪些知識點”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“AWTK-MVVM有哪些知識點”吧!

偃師網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項目制作,到程序開發(fā),運營維護(hù)。創(chuàng)新互聯(lián)建站于2013年開始到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。

1.1 分離用戶界面和業(yè)務(wù)邏輯

在開發(fā)應(yīng)用程序時,要把用戶界面和業(yè)務(wù)邏輯分離開來,這是每個程序員都知道的常識。分離用戶界面和業(yè)務(wù)邏輯有幾個重要的好處:

  1. 有利于隔離變化。用戶界面是最容易變化的,易用性的改進(jìn),外觀的美化和需求的變化,首先沖擊的就是用戶界面。如果用戶界面和業(yè)務(wù)邏輯耦合到一起,界面上一點微小的改動都會導(dǎo)致一系列代碼的修改,這不但會增加開發(fā)的成本和周期,而且這種改進(jìn)也是很無趣的,讓程序員的幸福感直線下降。

  2. 有利于自動測試。代碼中的BUG,越早被發(fā)現(xiàn),修改的成本越低,而單元測試是在早期發(fā)現(xiàn)BUG的重要手段。單元測試是自動化的,前期編寫測試代碼的投入,會因為后期節(jié)省測試的時間而獲得回報。單元測試代碼可以不斷積累,為軟件構(gòu)建一道堅固的防火墻,讓整個系統(tǒng)越來越穩(wěn)定。分離用戶界面和業(yè)務(wù)邏輯是提高代碼可測試性的重要手段,讓編寫單元測試程序成為可能。

  3. 有利于分工合作。用戶界面和業(yè)務(wù)邏輯的耦合,會讓用戶界面的修改很困難,程序員就會抵觸用戶界面的改動,讓設(shè)計師和程序員之間的矛盾加大。分離用戶界面和業(yè)務(wù)邏輯后,設(shè)計師的工作成果可以平滑的輸出給程序員,讓程序員和設(shè)計師一起過上共同幸福的生活。

1.2 如何分離用戶界面和業(yè)務(wù)邏輯

分離用戶界面和業(yè)務(wù)邏輯,MVVM是目前最常用的模式。MVVM并非憑空出現(xiàn),而是由MVC和MVP一路演化而來的,每次演化都是為了解決之前沒有解決的問題。

1.2.1 MVC模式

MVC是Model-View-Controller簡稱,它首次把系統(tǒng)分成Model,View和Controller這三部分,明確的把用戶界面和業(yè)務(wù)邏輯分離開來:

AWTK-MVVM有哪些知識點

  • 模型(Model)。簡單的說,模型就是業(yè)務(wù)邏輯。我們經(jīng)常說面向?qū)ο蟮脑O(shè)計和建模,所建立的模型就是這里的模型,是對現(xiàn)實世界中業(yè)務(wù)邏輯的抽象。面向?qū)ο蟮慕#褪且业綐I(yè)務(wù)邏輯中有哪些類以及這些類之間的關(guān)系。類描述了對象的屬性和行為,類是設(shè)計時的概念,對象是運行時的概念。對象通常就是業(yè)務(wù)實體,Model包含一個或多個業(yè)務(wù)實體。很多人(包括國內(nèi)一些知名的專家)認(rèn)為模型就是數(shù)據(jù),這是沒有透徹理解面向?qū)ο蟮脑O(shè)計導(dǎo)致的,對象是即有數(shù)據(jù)又有行為的,光有數(shù)據(jù)沒有行為,就無法讓對象之間協(xié)作,無法共同完成業(yè)務(wù)邏輯。

  • 視圖(View)。這個是大家都知道的,就是用戶與軟件交互的界面,對于GUI應(yīng)用程序來講,就是窗口和對話框,以及上面的各種控件。視圖應(yīng)該說是為用戶提供了一個界面,讓用戶可以觀察和操作模型。

  • 控制器(Controller)??刂破髫?fù)責(zé)解釋來自用戶通過鍵盤/鼠標(biāo)等設(shè)備的輸入,并通知模型和視圖做出相應(yīng)的改變。在GUI應(yīng)用程序中,直白的說,其實就是控件的事件處理函數(shù),它與界面相關(guān)和模型都相關(guān),它從界面獲取數(shù)據(jù),然后調(diào)用模型的函數(shù),有時還會直接更新用戶界面。

控制器(Controller)不是業(yè)務(wù)邏輯,理論上只是很薄的一個膠合層,但是很多新手把業(yè)務(wù)邏輯寫在控制器里,導(dǎo)致模型只剩下數(shù)據(jù)了,讓人產(chǎn)生控制器就是業(yè)務(wù)邏輯,模型就是數(shù)據(jù)的錯覺。

1.2.2 MVP模式

MVC模式解決分離用戶界面和業(yè)務(wù)邏輯的問題,但是還有一個重要的問題沒有解決: 控制器是界面相關(guān)的,沒有辦法為控制器編寫單元測試程序。為了解決上面的問題,MVP模式應(yīng)運而生。MVP是Model-View-Presenter簡稱。

AWTK-MVVM有哪些知識點

  • 模型(Model)。模型還是MVC中的模型,這里不再贅述。

  • 視圖(View)。視圖還是MVC中的視圖,但它不需要向模型注冊改變的事件通知了,這個由呈現(xiàn)邏輯去做了。

  • 呈現(xiàn)邏輯(Presenter)。Controller變成了Presenter只是表面現(xiàn)象,最重要的是MVP對視圖進(jìn)行了抽象,呈現(xiàn)邏輯不再向控制器那樣直接訪問具體的視圖了,而是通過視圖的接口去訪問視圖,視圖的接口是抽象的,可以有不同的實現(xiàn),所以可以方便的Mock出一個視圖,讓編寫呈現(xiàn)邏輯的單元測試程序成為可能。注意,這里視圖的接口并不是通用的,每個視圖都有一個獨立的接口,有一個真正的實現(xiàn)和一個用于測試Mock的實現(xiàn)。

從理論上講,MVP模式已經(jīng)很完備了,它很好的分離的界面和實現(xiàn),也可以為呈現(xiàn)邏輯編寫單元測試程序了。但是從工程角度來看,MVP卻有一個非常致命的缺陷:要編寫大量無聊的代碼!

為了方便說明,我們以一個編輯圖書信息例子,看看要寫哪些無聊的代碼。這個例子非常簡單,卻要寫不少無聊的代碼:

  • 1.初始化的時候,要為控件注冊事件處理函數(shù),比如為『保存』按鈕注冊事件處理函數(shù)。

  • 2.初始化的時候,要把圖書信息,如書名、作者和出版社等信息從模型中取出來,一個一個的設(shè)置到視圖的控件中去,在這個過程中,可能需要對數(shù)據(jù)格式進(jìn)行轉(zhuǎn)換,比如出版日期,在模型中是一個整數(shù),在視圖上表現(xiàn)為一個字符串,這就需要轉(zhuǎn)換。

  • 3.在編輯結(jié)束時,要從視圖中把圖書信息,如書名、作者和出版社等信息一個一個的取出來,再保存到模型中去。在這個過程中,可能需要對數(shù)據(jù)格式進(jìn)行轉(zhuǎn)換,比如前面的出版日期,要把視圖中的字符串轉(zhuǎn)換回模型中的整數(shù)。

  • 4.View都有一個接口定義,有一個真正的實現(xiàn)和一個Mock的實現(xiàn)。

這些代碼很簡單卻很無聊,在每個有界面的模塊中,都遵循同樣的規(guī)律,卻又完全不同,不得不重新編寫。

1.2.3.MVVM模式

把MVP模式這些規(guī)律找出來進(jìn)行抽象,通過一些規(guī)則在視圖和模型建立聯(lián)系,也就是數(shù)據(jù)綁定和命令綁定,就形成了MVVM模式。MVVM是Model-View-ViewModel簡稱。在MVVM中:

  • 模型(Model)。模型還是MVC中的模型,這里不再贅述。

  • 視圖(View)。視圖還是MVC中的視圖,但它不需要向模型注冊改變的事件通知了,這個由數(shù)據(jù)綁定去做了。

  • 視圖模型(ViewModel)。 ViewModel不是Controller也不是Presenter,視圖模型是視圖還是模型?按MVVM的發(fā)明者John Gossman的話說,視圖模型是視圖眼中的模型。放大鏡下的蟲子還是蟲子,所以視圖眼中的模型還是模型。視圖模型與視圖沒有直接關(guān)系,是可以為之編寫單元測試的。

呈現(xiàn)邏輯Presenter去哪里了?呈現(xiàn)邏輯從一行行代碼變成了一條條數(shù)據(jù)綁定和命令綁定的規(guī)則,對規(guī)則的處理和解釋成了MVVM框架或公用庫,可以在多個項目中共享。

AWTK-MVVM有哪些知識點

MVVM模式有下列好處:

  • 強(qiáng)制分離用戶界面和業(yè)務(wù)邏輯。在MVC和MVP中,不能強(qiáng)制分離用戶界面和業(yè)務(wù)邏輯,程序員的一念之間,就導(dǎo)致用戶界面和業(yè)務(wù)邏輯混在一起。MVVM中不需要編寫界面相關(guān)的代碼,自然沒有辦法讓用戶界面和業(yè)務(wù)邏輯耦合到一起。

  • 界面描述文件和程序代碼之間具有更松的耦合。通常用XML或RC文件來描述界面,在MVC和MVP中,在界面上增加一個控件或刪除一個控件,都會導(dǎo)致相應(yīng)的代碼需要修改。而在MVVM中,采用了面向意圖的編程,界面上表現(xiàn)的只是一種意圖,至于在程序中,誰去實現(xiàn),怎么實現(xiàn),甚至有沒有實現(xiàn),界面都是不關(guān)心的,所以界面和代碼之間值的耦合是很松的。

  • 不需要學(xué)習(xí)GUI的API。通過數(shù)據(jù)綁定和命令綁定建立視圖和模型之間的聯(lián)系。用聲明式的規(guī)則取代命令式的代碼,不需要寫界面相關(guān)的代碼,所以不需要學(xué)習(xí)GUI的API,無論是采用Qt還是AWTK,都用同樣的方式開發(fā)。

視圖模型和模型并不相同,之所以要引入視圖模型,主要原因有:

  • 模型中的數(shù)據(jù)有時并不適合直接顯示在視圖上。比如出版日期,在模型中是整數(shù),直接顯示出來,用戶就看不懂,需要轉(zhuǎn)換成人類可以理解的字符串。

  • 模型中的一個數(shù)據(jù)項可能以多種形式呈現(xiàn)在視圖上。比如出版日期,除了顯示出版日期外,也可能把最近出版的書,顯示一個新書標(biāo)志。

  • 視圖中的輸入數(shù)據(jù)和模型中的存儲數(shù)據(jù),它們的格式有時可能不同。比如出版日期,視圖上輸入的格式和模型里存儲的格式就不一樣。

  • 視圖需要視圖模型提供數(shù)據(jù)校驗規(guī)則來判斷視圖上的輸入是否合法。

  • 有些數(shù)據(jù)是有依賴關(guān)系的。比如在輸入收貨地址時,選擇省份時,城市列表跟著變化。

  • 有些狀態(tài)不屬于業(yè)務(wù)邏輯,但是需要保存下來。如為了支持撤銷操作,需要保存命令歷史記錄。

  • 在C/C++等靜態(tài)語言中,沒有辦法通過函數(shù)的名稱去調(diào)用對象的成員函數(shù),也沒有辦法通過屬性的名稱去訪問對象的成員變量。視圖模型需要提供一種機(jī)制來實現(xiàn)這些功能,否則綁定規(guī)則就沒法實現(xiàn)。

MVVM 的缺點。

  • 內(nèi)存問題。據(jù)說WPF內(nèi)存開銷很大,即使在PC上也大得讓人無法忍受(常有人借此來反對MVVM)。WEB前端流行的MVVM框架,像React和Vue.js等,采用虛擬DOM的方式,內(nèi)存需求可能有大幅度增加。

  • 性能問題。MVVM通常的做法是,模型有變化時會刷新整個界面。如果采用虛擬DOM的方式,還需要重新構(gòu)建一個虛擬DOM,與原來的虛擬DOM比較,性能開銷就更大了。

  • 調(diào)試問題。如果沒有工具的協(xié)助,數(shù)據(jù)綁定會讓調(diào)試變得困難。

以上這些問題在手機(jī)和PC上,已經(jīng)不是什么大問題了,但對于嵌入式系統(tǒng)來說,仍然是難以跨越的障礙,所以目前幾乎沒有針對嵌入式平臺開發(fā)的MVVM框架。

1.3 AWTK-MVVM

AWTK-MVVM是一套用C語言開發(fā)的,專門為嵌入式平臺優(yōu)化的MVVM框架。它實現(xiàn)了數(shù)據(jù)綁定、命令綁定和窗口導(dǎo)航等基本功能,使用AWTK-MVVM開發(fā)應(yīng)用程序,無需學(xué)習(xí)AWTK本身的API,只需學(xué)習(xí)綁定規(guī)則和模型的實現(xiàn)方式即可。

與其它MVVM框架相比,AWTK-MVVM特點有:

  • 代碼小。

    • 核心代碼:約3000行。

    • AWTK相關(guān)代碼:約700行。

    • jerryscript相關(guān)代碼(可選):約1700行。

  • 性能高。核心代碼用C語言開發(fā),其性能與直接使用AWTK差別不大。

  • 內(nèi)存開銷小。

    • 一條綁定規(guī)則大概需要150字節(jié)。一個窗口上若有10條綁定規(guī)則,內(nèi)存占用了也就1.5K。

    • 列表中的綁定規(guī)則可以共享,額外增加的內(nèi)存開銷,比例也是很小的。

  • 隔離更徹底。在AWTK-MVVM中,界面和綁定規(guī)則在XML中描述,開發(fā)應(yīng)用程序時只需要開發(fā)模型(也就是業(yè)務(wù)邏輯)即可。除非通過特殊手段,開發(fā)者沒有機(jī)會直接去訪問視圖。

  • 易調(diào)試。

    • 提供視圖模型的框架生成工具,避免手寫代碼造成的錯誤。

    • 增加了各種異常處理的LOG信息。

    • 提供大量的demo以供參考。

    • 開放源碼,調(diào)試方便。

  • 支持多語言開發(fā)。

    • 目前支持C語言和JS。

    • 以后會根據(jù)需要支持新的編程語言。

這里支持的多種編程語言與AWTK的腳本綁定是完全不相關(guān)的概念:這里是讓應(yīng)用程序的業(yè)務(wù)邏輯可以用不同的語言來開發(fā),而AWTK的腳本綁定是讓應(yīng)用程序可以使用不同的腳本語言來調(diào)用AWTK的API。

  • 可移植到其它GUI。AWTK-MVVM是為AWTK設(shè)計的,但是我們隔離了與AWTK相關(guān)的代碼,讓它可以移植到其它GUI。AWTK相關(guān)的代碼僅僅700來行,可見移植到新的GUI是非常容易的事情。當(dāng)然,AWTK可以滿足常見的需要,這樣做只是給開發(fā)者提供更多選擇。

AWTK-MVVM也有些限制,目前不支持界面元素動態(tài)生成,這時可以結(jié)合傳統(tǒng)的方法開發(fā)。以后AWTK會支持WEB前端流行的框架如Reactjs和Vuejs,在高端平臺(如手機(jī)、小程序和桌面程序)中應(yīng)用。

感謝各位的閱讀,以上就是“AWTK-MVVM有哪些知識點”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對AWTK-MVVM有哪些知識點這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

新聞標(biāo)題:AWTK-MVVM有哪些知識點
本文網(wǎng)址:http://muchs.cn/article10/pdghgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、網(wǎng)站策劃、網(wǎng)站導(dǎo)航網(wǎng)站收錄、云服務(wù)器、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)