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

    文章

    15230

    浏览量

    171204
  • LabVIEW
    +关注

    关注

    1918

    文章

    3619

    浏览量

    316998
  • Framework
    +关注

    关注

    0

    文章

    23

    浏览量

    8543
  • MVC
    MVC
    +关注

    关注

    0

    文章

    73

    浏览量

    13783

原文标题:教程 | 基于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 5399次阅读

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

    首先,第一次使用Reply Msg时,继承关系中是没有Reply Msg的,因为默认Reply Msg不包含在Actor Framework.lvlib中的,需要手动添加。
    的头像 发表于 11-04 10:33 2664次阅读

    教程|创建你的第一个Actor Framework

    本文小编将手把手教你如何在LabVIEW中创建你的第一个Actor Framework,跟着搭建并感受对象和类的神奇吧!
    的头像 发表于 12-26 17:00 2401次阅读

    基于Actor Framework仿真线性编码器

    在学习LabView面向对象编程过程中,相信大家也都接触到了Actor Framework。该框架于2010年NI Week首次公布,经过多年不断迭代更新,逐渐成为LabVIEW中最为重要的并发开发框架。
    的头像 发表于 12-22 10:15 285次阅读
    基于<b class='flag-5'>Actor</b> <b class='flag-5'>Framework</b>仿真线性编码器