一种基于元数据的MVC模型实现
2020-02-02张名明凌旺宫斌
张名明 凌旺 宫斌
(中国船舶重工集团公司第七二三研究所 江苏省扬州市 225011)
在程序设计领域,处理数据,显示数据通常占据了程序开发中大部分的工作量,而且后期为了适应不同或变化的数据,往往需要新增或修改流程已达成对变更和新数据的处理和显示能力。通过对其中一些中小规模的程序,比如BIT 可视化程序在业务逻辑和业务规则比较稳定的情况下,元数据技术可用来描述程序中的数据逻辑,固化相关的业务规则,在程序运行时就可以通过改变数据来改变程序的行为。同时运用MVC 模式开发程序,方便分离数据元数据和视图元数据,降低程序的复杂性,并提升维护性。
本文将简述元数据技术和MVC 模式,并以此为基础介绍在BIT 可视化程序中的应用,包括开发技术的介绍和讨论,以及相应的设计实现。
1 元数据技术在MVC模式中应用
1.1 元数据技术和MVC模式简述
元数据,英文中表示为Metadata,主要用来表述数据的属性、结构和内容间的关系信息。在面向对象的程序设计范畴,元数据被解释为:不能进行结构变更,只能通过改变赋值来变更程序行为的数据。在程序中元数据始终值用来解释程序的行为,而且通过对不定位置的元素进行不同赋值还可以等价原程序行为[1]。
MVC 模式是软件工程中的一种软件框架模式,它把软件系统分为模型(Model),视图(View)和控制器(Control)三个基本部分[2]。用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。此模式通过对复杂度的简化,使程序结构更加直观。
1.2 元数据技术在MVC模式中的使用
MVC 模式中的模型用于处理应用程序中的数据逻辑部分,应用程序中的数据一般包括业务数据和业务规则两部分,对于小规模的程序和业务逻辑比较明确的应用程序,可以采用元数据对业务数据和业务规则进行描述,如图1所示,具体的步骤是:
(1)通过对数据逻辑进行分类,找到同类的数据。
(2)对同类的数据进行抽象、建模,采用元数据的形式对该模型进行描述,形成统一的自描述的结构体。
(3)利用该统一的结构体,对不同的数据类型进行实例化,使每类数据都有一条对应的元数据描述。
同样对于视图(View)中的同类显示元素也可以抽象成统一的结构体,并用元数据进行描述。在模型数据和视图数据都可以被元数据描述后,再将两者间的关系也用元数据映射进行描述,比如将某类数据中的某段数据映射到某类视图中的某个元素进行显示,这种多对多的映射可以满足各类模型数据的可视化需求。
图1:使用元数据对模型建模的步骤
1.3 在MVC模式中使用元数据技术的分析
MVC 模式将视图层和数据层分离,原本就具备耦合性低,重用性高,部署快,维护性高成本低等优点,但同时也存在一些不足,比如增加系统结构和实现的复杂性,将花费大量时间将MVC 模式应用到小型、中等规模的应用程序通常会得不偿失。但从另一个角度分析,正是因为小型、中等规模的应用程序业务逻辑较清晰,适合运用元数据技术对业务规则和显示逻辑进行建模,实现一套数据驱动的应用程序,最大化应用程序的重用性,从而弥补采用MVC模式造成较高成本的缺陷。
2 基于元数据的BIT可视化MVC模型实现
2.1 BIT可视化需求分析
机内测试,简称BIT(Built-In-Test),是提高电路系统可测试性而提高系统工作可靠性,减少系统维护费用的关键技术[3]。相对于复杂的大系统,BIT 检测系统可以算是一个中小型系统,而BIT 可视化则是其中一个重要的组成部分,优秀的BIT 可视化设计可以提高诊断能力,简化设备维修,提高维修性,降低总体费用,延长产品的寿命。
优秀的BIT 可视化设计包括以下几个方面:
(1)采用丰富的展示形式,使用状态灯,状态框图,按钮,状态图片等状态元素,给用户更直观地展示元件的状态。
(2)采用多层级的展示方式,按照如设备级,机柜级,板卡级等多层级的展示方式,使用户可以更便捷地在各级间进行切换。同时尽量展示形式尽量设备内的真实布局,也可以使用户对设备的布局结构有更深入的了解,也能更快速地定位问题。
表1:自定义插件功能表
(3)采用界面和数据分离的设计原则,开发一套可扩展的BIT 可视化程序框架,定义好BIT 可视化的流程和设计规范,后续开发者可以在这套框架上自由的设计和组合BIT 界面。
2.2 实现技术选择
在基于元数据的MVC模型实现技术上采用QT平台进行开发,首先QT 不光提供了一套控件方便开发者设计出一套精美的用户界面。还构建了一套支持扩展QT 设计器的插件架构,以及相关的QtDesigner 模块用于创建可以加载到设计器中的自定义插件,以及相关用于访问设计器功能的类。
QT 的显示框架包括了三个重要的部件:用户界面文件,界面生成引擎,界面设计器,这三个部件,可以很方便的对BIT 界面进行设计,ui 文件作为BIT 界面的显示模板,在运行时可以根据不同的数据显示相应的BIT 状态。
2.3 基于元数据的MVC模型设计
2.3.1 整体框架
在BIT 可视化程序的框架设计中采用MVC 模式进行框架设计,分为Model,View,Controller 三个层次组成,Model 层负责维护BIT 可视化程序的数据结构,并提供数据的存储和查询功能,包含MsgModel,PageModel 和Service 三个类。View 层负责维护每个BIT 可视化页面,包含Page 和UIContainManager 两个类。Control层负责联系Model 和View 层,提供不同BIT 页间的导航以及各种事件的响应功能,包含Router 类。
2.3.2 Model 层
Model 层根据报文,将设备不同层级的BIT 数据映射为Message 数据结构。对外通过Service 类提供数据,Service 类提供获取每个Message 中数据项的接口,并提供标准的数据变化通知消息。
Model 层中提供MsgModel 类作为对BIT 数据的元数据管理类,它使用XML 进行元数据的配置,包含报文名称,字段名称,是否Bit,字段大小,字段默认值等属性。
Model 层在提供PageModel 类,用于管理BIT 数据和界面(Page)间的元数据映射,它对应的元数据映射配置文件格式,包含:页面名称,控件名称,控件属性,报文名称,报文字段等属性。
Model 层中提供RulerModel 类用于配置各报文中的固定字段,辅助BIT 程序过滤出具体的报文。
最后Model 层通过Service 类完成对以上三个类的管理,并对外提供对内部BIT 数据的存储功能。
2.3.3 View 层
View 层中每个QWidget 界面都是一个容器,通过QT 的界面生成引擎生成,根据界面配置ui 文件生成具体的页面,包含设计页面的相关控件,并对每个元素包含相关的属性,并能够响应具体的事件。Page 类主要记录QWiget 中没有BIT 可视化元素的索引,以方便对其进行查询和赋值。UiContainManager 类则通过名称记录了Page 的索引,以方便管理Page 集合。
UIContainManager 类负责加载每个ui 文件,生成对应的页面,并对页面中需要动态设置的控件建立索引,具体的加载流程为首先读取ui 文件夹文件,将每个ui 文件依次生成对应的Page,并对Page 中的控件书进行索引,记录导航、板块状态、状态灯以及状态图片插件的索引。
View 层中的自定义插件主要分为四种,对应的功能如表1所示。
2.3.4 Control 层
Control 层通过Router 类进行管理,通过对Model 和View 层的功能调用,提供不同BIT 页间的导航以及各种事件的响应功能。
当加载一个页面时,先对页面上的导航插件进行事件绑定,注册它们的点击事件,然后根据pageModel 中的映射关系,将数据更新到page 中,并激活对应的page 进行显示。
3 结论
使用基于元数据的MVC 模型设计的BIT 可视化模块,为BIT检测提供了更灵活的BIT 界面布局和丰富的设计元素,极大的扩充了BIT 可视化的能力。同时基于QT 功能提供的BIT 可视化功能设计,实现了界面和业务逻辑的分离,为用户行为设计师和开发人员并行工作提供了可能,为BIT 可视化模块的模块化,通用化提供了重要支撑。