精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

教程|基于Actor Framework的MVC設計實現

華穗科技 ? 來源:華穗科技 ? 2022-12-26 16:48 ? 次閱讀

今天我們學習如何基于ActorFramework實現MVC框架的設計。

本文教程

基于ActorFramework的MVC設計實現

一、什么是MVC框架

MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫。

Model(模型)表示應用程序核心(比如數據庫記錄列表)。是應用程序中用于處理應用程序數據邏輯的部分。

View(視圖)顯示數據(數據庫記錄)。是應用程序中處理數據顯示的部分。通常視圖是依據模型數據創建的。

Controller(控制器)處理輸入(寫入數據庫記錄)。是應用程序中處理用戶交互的部分。通常控制器負責從視圖讀取數據,控制用戶輸入,并向模型發送數據。控制器本身不輸出任何東西和做任何處理。它只是接收請求并決定調用哪個模型構件去處理請求,然后再確定用哪個視圖來顯示返回的數據。

8e21d22e-82bf-11ed-bfe3-dac502259ad0.png

如下圖數據庫操作的例子所示,MVC框架形成了一個閉環,這也符合設計模式的開放-封閉原則。用戶與軟件的人機交互通過Controlloer控制器將用戶輸入的指令和數據傳遞給需要進行操作的模型,模型內部進行一系列的算法邏輯,將輸出的結果反饋給VIEW視圖或更改不同的VIEW來更新不同的界面。用戶根據修改更新后的VIEW界面,再次進行新的人機交互。

8e46f266-82bf-11ed-bfe3-dac502259ad0.png

接下來我們以一個擁有加、減法兩個Model的MVC為例,詳細講講如何在LabVIEW中實現Controller、VIEW、Model之間實現相互通訊的。

2、基于Actor Framework的VIEW

視圖是指用戶看到并與之交互的界面。在視圖中其實沒有真正的處理發生,它只是作為一種輸出數據并允許用戶操縱的方式。

(1)創建一個Actor,命名為User Interface。

(2)重寫Actor Core

在項目資源管理器中右鍵User Interface.lvclass→ VI forOverride...,選擇ActorCore.vi,保存ActorCore.vi。

8ebbbfa6-82bf-11ed-bfe3-dac502259ad0.png

(3)在重寫的Actor Core.vi程序框圖中創建一個“生產者”響應用戶界面動作。

增加while循環嵌套事件結構響應界面動作;

增加Read Self Enqueuer.vi讀取當前Actor消息地址。位置:程序框圖 → Data Communication→ Actor Framework→ReadSelf Enqueuer.vi;

增加Read CallerEnqueuer.vi讀取當前Actor消息地址。位置:程序框圖→ Data Communication→ Actor Framework→Read CallerEnqueuer.vi;

8ee031ec-82bf-11ed-bfe3-dac502259ad0.png

增加打開、關閉Actor Core.vi前面板調用節點;

增加stop注冊事件停止“生產者”。

8f0083f2-82bf-11ed-bfe3-dac502259ad0.png

8f1a594e-82bf-11ed-bfe3-dac502259ad0.png

如此,一個可以響應用戶操作的VIEW界面的程序框圖就搭完了,接下來我們在VIEW的前面板加上可以操控的控件。

8f549c58-82bf-11ed-bfe3-dac502259ad0.png

當用戶輸入AB兩個數值,并按下加或減的按鈕后,VIEW將會產生事件,并通過調用Caller的隊列(即根操作者Controller)來向Controller發送數據和操作指令。

(4)創建結果控件的引用屬性

由于VIEW不僅需要完成用戶操作和數據的發送,也要完成Model執行后的數據顯示,如果要在消息里將新值寫入VIEW的前面板控件,那么就需要用到控件的引用,所以我們在VIEW的屬性中添加數值控件的引用。

8f72a63a-82bf-11ed-bfe3-dac502259ad0.png

并在VIEW 的Actor Core.vi中,于啟動操作者之前將結果數值控件的引用寫入屬性中。

(5)創建顯示結果的消息

當Controller把結果發送給VIEW時,VIEW需要通過一個消息將結果值顯示在前面板上。所以需要創建一個基于靜態分配的模板,命名為Update Result.vi。在前面板添加結果數值控件,連接接線端并創建消息。

8f8e295a-82bf-11ed-bfe3-dac502259ad0.png

于程序框圖中將結果數據通過剛剛創建的引用放入前面板控件中顯示。

8fb9f422-82bf-11ed-bfe3-dac502259ad0.png

3、 基于Actor Framework的Model

模型表示業務規則,擁有最多的處理任務。被模型返回的數據是中立的,模型與數據格式無關,這樣一個模型能為多個視圖提供數據,由于應用于模型的代碼只需寫一次就可以被多個視圖重用,所以減少了代碼的重復性。

在這里我們創建兩個Model,一個用來執行加法操作的Model_Add,一個用來執行減法操作的Model_Sub

(1)創建兩個Actor,命名為Model_Add和Model_Sub。

(2)創建執行操作的消息

于加法Model操作者中創建基于靜態分配模板的VI,命名為Add.vi。于其前面板中添加數值A與數值B的控件,連接接線端并為該VI創建消息。Controller發來的數據將會通過該VI的消息來進入Model執行對應的操作。

8ff892d6-82bf-11ed-bfe3-dac502259ad0.png

該VI執行完加法操作后,需要將結果返回至Controller,Controller再將結果更新至VIEW。這樣便完成了一次C到M,M到V的操作。

那么該如何通過消息再將加好的結果送至Controller呢,就需要用到Controller的發送消息啦。程序框圖中先預留Read Caller Enqueue的接口,等Controller和更新數據的消息創建完成后再進行連接。

901b4d08-82bf-11ed-bfe3-dac502259ad0.png

同樣的,為減法Model也創建一個用以執行減法操作的VI,并創建消息。

4、 基于Actor Framework的Controller

控制器接受用戶的輸入并調用模型和視圖去完成用戶的需求,控制器本身不輸出任何東西和做任何處理。它只是接收請求并決定調用哪個模型構件去處理請求,然后再確定用哪個視圖來顯示返回的數據。

(1)創建一個Actor,命名為Controller。

(2)重寫Actor Core

在項目資源管理器中右鍵User Interface.lvclass→ VI for Override...,選擇Actor Core.vi,保存Actor Core.vi。

(3)于ActorCore中啟動所有VIEW和Model

Controller作為MVC結構的大腦,需要調用分配數據給對應的VIEW和Model,所以Controller需要知道它的所有嵌套操作者的隊列地址。和普通隊列操作一樣,只有擁有了對方的地址才可以進行數據的傳輸。

于Controller的屬性中添加一個VIEW的隊列,兩個Model的隊列,這樣可以將啟動的嵌套操作者的隊列地址存放進Controller的屬性里,等數據發來就可以直接從屬性里取到對應的地址進行消息的發送啦。

90383260-82bf-11ed-bfe3-dac502259ad0.png

905aa4a8-82bf-11ed-bfe3-dac502259ad0.png

于Controller的Actor Core.vi中用Launch Nested Actor啟動VIEW和Model,并將產生的隊列放進剛剛創建好的Controller的屬性中。

907de648-82bf-11ed-bfe3-dac502259ad0.png

(4)創建接收VIEW數據的消息

于Controller中創建用以接收VIEW數據和執行操作的消息,創建基于靜態分配模板的VI,命名為Choose Model.vi。

該VI中創建數組A和數值B兩個數值輸入控件和一個枚舉控件,并為其連接接線端,創建消息。

90b3355a-82bf-11ed-bfe3-dac502259ad0.png

枚舉輸入端用以決定VIEW中用戶操作的事件是減法還是加法,數值輸入端用以將VIEW中傳來的數據轉發給對應操作的Model。故于程序框圖中增加條件結構,當VIEW的操作為加法時,將數值A和數值B發送給Model_Add進行加法操作,當VIEW的操作為減法時,將數值A和數值B發送給Model_Sub進行減法操作。此時就用到了剛剛存下來的隊列啦!

90d20340-82bf-11ed-bfe3-dac502259ad0.png

可以看到上圖中對操作進行了判斷,并選取了不同的Model隊列用來執行不同的操作。注意把數據發送給Model的操作是通過之前創建的Model消息來實現的哦!

(5)創建接收Model數據的消息

Controller不僅需要接收VIEW傳來的數據和操作,也需要接收Model傳來的執行結果和反饋。

于Controller中創建用以接收Model數據和反饋的消息,創建基于靜態分配模板的VI,命名為Update Data.vi。

該VI中創建一個結果數值控件,連接接線端并創建消息。

90fc5a14-82bf-11ed-bfe3-dac502259ad0.png

由于Controller接收到Model返回的數值后需要把結果告知VIEW并顯示,所以在接收Model數據的同時需要將結果通過消息發送給VIEW。所以要在接收Model數據后向VIEW發送該結果數據。

913467a6-82bf-11ed-bfe3-dac502259ad0.png

上圖就展示了如何在Controller接收結果數據后發送給VIEW的程序框圖,圖中運用到的發送Update Result.vi即前面創建過的VIEW消息。

5、 啟動程序

所有模塊都構建完成,接下來就是啟動核心操作者啦。

創建一個名為Launcher.vi的普通VI,于程序框圖中將Controller啟動。

915df5b2-82bf-11ed-bfe3-dac502259ad0.png

啟動該VI后,可以看到彈出了VIEW的頁面,輸入數值A和B后,按下加法按鈕,可以看到結果控件中展示了加法的結果。

917a9596-82bf-11ed-bfe3-dac502259ad0.png

6、 MVC鏈路總結

大家發現沒有,MVC的鏈路總是一環套一環,V的操作和數據通過消息發送給Controller,Controller再將其轉發給對應的Model,Model執行完畢后又將結果數據發送給Controller,Controller再將結果數據轉發給VIEW顯示。Controller就是整個MVC的大腦,它決定了數據該去往何處。Model就是執行操作的執行官,他不考慮這些數據是從哪里來的,它只關心對這些數據的操作,并將結果返回給調用它的操作者。而VIEW根本不考慮數據的流程和操作,它只用把用戶觸發的事件通過消息傳送給大腦,再一直接收Controller發來的數據而已。

雖然看起來是密不可分的,但大腦只要知道了數據該發往何處,就可以通過更改隊列地址來改變數據的操作。而VIEW和Model也可以無限擴展,只要告訴大腦它們的地址就可以了。

更高級一些,就是Model和VIEW不通過Controller直接進行相互數據的發送,那這就是所謂的MVVM結構啦。

對于加減法的運用來說,MVC架構太空太大了,但是對于更龐大更復雜的項目呢,考慮使用MVC架構和抽象就可以變成低耦合的程序,每個模塊的修改都可以獨立于整個程序,是不是更加方便了呢?

以上就是如何在LabVIEW中為ActorFramework構建MVC架構的方法。 對Actor Framework感興趣的工程師們,歡迎持續關注、留言和點贊,也可以私信小編各位的技術困惑和技術需求,以獲取參加免費線下培訓和技術交流的機會哦。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 控制器
    +關注

    關注

    112

    文章

    16197

    瀏覽量

    177395
  • LabVIEW
    +關注

    關注

    1963

    文章

    3652

    瀏覽量

    322391
  • Framework
    +關注

    關注

    0

    文章

    24

    瀏覽量

    8570
  • MVC
    MVC
    +關注

    關注

    0

    文章

    73

    瀏覽量

    13841

原文標題:教程 | 基于Actor Framework的MVC設計實現

文章出處:【微信號:華穗科技,微信公眾號:華穗科技】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    [每周一練]Actor Framework框架(1125-1201)

    。Creat Project里面就大不相同。當時也創建了Actor Framework,體驗了一下,感覺看不懂就漸漸淡忘了,也沒有注意這個框架的名字(因為不了解)。今年有一次被問到是否知道Actor
    發表于 11-25 00:04

    sushu---Actor Framework基本介紹

    一練]Actor Framework框架(1125-1201)2016-02-28 20:15:20新寫的一篇帖子:sushu---Actor Framework一種使用方式主貼里面循
    發表于 01-03 20:05

    sushu---Actor Framework一種使用方式

    :2016-02-27------------------------------在未使用AF之前做了一個ERP系統,新建了一個頂層類ERP.lvclass.從13年就知曉Actor Framework 斷斷續續
    發表于 02-28 20:40

    Labview Actor Framework 框架使用例子(反饋式蒸發器)

    工作中遇到老外的項目,用的是Actor Framework框架,所以最近這段時間學習了下。但網上這塊資料非常少,就算是有也是非常簡單的介紹。后面看到這篇博客http://blog.csdn.net
    發表于 11-17 19:36

    actor framework 學習

    本帖最后由 yingtn 于 2018-2-27 11:47 編輯 各位前輩:小弟在學習 actor framework 時遇到了一個問題:在右擊類新建時“重寫的VI項”是灰色的,不可選 ,求教?我用的是 labview 2015 32位。
    發表于 02-27 11:44

    Actor Framework中的定時結構 (LabVIEW中的定時結構詳解----終)

    了兩個方案實現Actor Framework中的定時結構1.使用上一貼中定時類,做定時結構,這個方法是仿寫Unclad的實例寫的,再實現一次也沒撒新意。2.利用
    發表于 06-26 01:18

    Actor Framework -- Test Sequence

    本帖最后由 shenjianym 于 2019-10-29 08:13 編輯 用Actor Framework框架寫了一個關于測試序列(生成隨機數并判斷)的程序。該程序使用的是LabVIEW2017版本,加2017版JKL狀態機。注:程序跑第二次的時候會出現BUG,
    發表于 10-28 15:28

    LabVIEW Actor Framework學習之八皇后

    大家好,我是Richie,為什么把貼子給我刪除了呢,我再試試重新發一次。本期重點:以LabVIEW OOP為基礎,使用AF(Actor Framework)框架來編寫程序,對八皇后問題進行求解。歡迎
    發表于 05-30 20:08

    Actor Framework學習之路記錄【一】

    項目中的工作;2、掌握Actor Framework框架,將最近完成的一個測試項目進行重構;學習內容:1、學習面向對象的基礎知識:封裝、繼承、多態、組合2、學習Labview中的面向對象的實現3、學習硬件抽象層HAL4、學習
    發表于 04-14 17:03

    榮小菜補鈣記第33期:基于LabVIEW Actor Framework的連續測量和記錄系統1

    榮小菜補鈣記第33期:基于LabVIEW Actor Framework的連續測量和記錄系統1 同步更新于 WeChat:榮小菜在補鈣大家好,我是榮小菜,也可以叫我Richie,從本期開始打算開始
    發表于 05-29 15:32

    榮小菜補鈣記第41期:基于LabVIEW Actor Framework的連續測量和記錄系統5

    榮小菜補鈣記第41期:基于LabVIEW Actor Framework的連續測量和記錄系統5 同步更新于 WeChat:榮小菜在補鈣歡迎關注 內容更豐富大家好,我是榮小菜,上一期講解了作為框架
    發表于 07-27 20:55

    在LabVIEW中創建Actor Framework的抽象消息及接口

    由于面向對象需要降低耦合性,那么基于類的操作者也需要考慮如何降低耦合性。當Nest Actor給Root Actor發送消息時,需要調用Root Actor的消息類的Send ***.vi,這就導致了Nest
    的頭像 發表于 09-23 10:51 ?6963次閱讀

    在LabVIEW中創建Actor Framework的同步消息

    首先,第一次使用Reply Msg時,繼承關系中是沒有Reply Msg的,因為默認Reply Msg不包含在Actor Framework.lvlib中的,需要手動添加。
    的頭像 發表于 11-04 10:33 ?3800次閱讀

    教程|創建你的第一個Actor Framework

    本文小編將手把手教你如何在LabVIEW中創建你的第一個Actor Framework,跟著搭建并感受對象和類的神奇吧!
    的頭像 發表于 12-26 17:00 ?3508次閱讀

    基于Actor Framework仿真線性編碼器

    在學習LabView面向對象編程過程中,相信大家也都接觸到了Actor Framework。該框架于2010年NI Week首次公布,經過多年不斷迭代更新,逐漸成為LabVIEW中最為重要的并發開發框架。
    的頭像 發表于 12-22 10:15 ?775次閱讀
    基于<b class='flag-5'>Actor</b> <b class='flag-5'>Framework</b>仿真線性編碼器