基于DSL语言的MES系统建模平台的实现
扫描二维码
随时随地手机看文章
O 引言
以往MES系统项目的开发都是各个项目独立地进行设计和开发,而这些项目中有一部分需求和功能有相同的地方,这样,就会在一定程度上造成重复劳动和资源浪费。为此,笔者将业务需求转化为模型,开发了一套基于模型驱动的系统平台,同时搭载多种行业模型包。这样,当项目应用时,就可以根据需要对模型进行简单修改,然后直接满足项目需求。另外,此平台依旧保留有快速的二次开发接口,这样不但可以缩短整个系统的开发周期,而且可以大量节约人力物力资源。该系统平台主要包括系统管理、建模平台、工作流、业务系统等。本文主要讲述建模平台的设计与实现方法。
1 DSL概述
Visual St udio DSL(Domain-Specific Language,特定领域语言)工具是微软公司针对特定领域开发而专门设计的。特定领域开发是一种用于解决重复发生的问题的方法,是可以使用DSL工具作为自动生成相同或相似代码的一种方式。DSL是指软件开发中出于某特定考虑而设计的比较小的、目标明确的语言。它们的作用是使用某特定领域里惯用的符号或者表示法对该领域的实体或者流程进行建模。
DSL工具提供有一种图形化的操作方式。开始创建领域特定语言(DSL)是围绕DSL设计器进行的,设计器的功能是设计和产生DSL,或者设
计依附于可生成代码DSL的模型。
域模型(domain model)是DSL定义的核心部分。域模型就像DSL的语法,它定义了域类(domain class)和域关系(domain relationship),即定义了组成模型的要素,并给出了将这些要素互相联系在一起的规则。域模型和表示是分离的,它仅定义了DSL所要处理的概念层上的内容,而并没有给出如何在图中表示这些概念。在DSL设计器中,图形和域类的对应关系是非常直观的,有多种基本的图形和连接线类型可供选择,在定义了一组图形之后,还要定义一组图形的映射关系,也就是定义用哪个图形或者连接线来显示某个域类或者域关系。表示层和底层模型相分离的设计,可以在不改动模型的情况下,合理改变域模型的表示方式。
在用DSL设计器完成DSL的定义后,将从这个DSL定义生成编辑和处理DSL实例工具的代码,然后就可通过写一些附加的代码,来增强所产生的设计器的功能。
2 模型驱动的建模平台设计
模型驱动就是对企业的业务需求进行分析后,通过友好的图形化用户交互界面将企业的业务需求转化为模型,图1为其建模平台示意图。这样,通过实现各种业务模块(例如:设备管理)系统功能(例如:设备停用)的建模配置,系统就可将其自动转化为机器可读和高度抽象的平台无关模型,这些模型独立于实现技术和语言,并以标准化的XML方式储存。系统可根据模型生成基于SOA的运行代码,并可通过发布解决方案的方式来将建立好的业务模型集成到系统运行平台之中,最后在系统运行平台上运行。建模平台可支持使用过程中动态调整流程、动态配置业务和展示信息,可实现软件的配置与信息管理的一体化应用。当业务发生变化后,也可以在系统中修改原有的业务模型并重新发布。其方便地改变特点,可以真正实现快速满足客户业务变化的需要。
<center>
建模平台的设计主要分为三部分:数据模型、后台服务和前台页面,图2所示为建模平台的模型图。
[!--empirenews.page--]
数据模型的元素包括表模型和视图模型,是对业务功能单元的底层功能的封装,它针对数据库表和视图映射对象,包括常用的增删改查等基本操作和属性。元素的建立可以通过图形化的方式配置数据库表和视图,并调用数据库生成模板生成到数据库,也可以从数据库中添加已存在的表和视图。数据模型文件的存储格式为XML文件格式。数据模型配置完成后,即可根据当前生成引擎创建数据模型对应运行代码文件,即读取表或视图模型对应的模板,并根据数据模型配置文件中的配置信息替换模板相应信息,等生成的代码准备好后,可对其进行编译,编译成功,则可在指定位置生成相应的动态链接库。
后台服务包括服务方法及方法内容的配置,是对业务功能所要执行的一系列活动的封装,就是根据业务逻辑来组合数据模型元素的操作,即配置各相关数据模型元素操作的执行顺序及关联关系,创建业务功能服务及方法。由于通过模型驱动可提供业务敏捷性,故能灵活地适应不断变化的业务,一旦需要,就可以对现有服务进行必要的更改,从而达到业务驱动服务的目的。后台服务文件的存储格式为XML文件格式。后台服务配置完成后,即可根据当前生成引擎创建服务所对应的运行代码文件。
前台页面是业务系统的展现层,具体体现为与最终用户交互的界面。创建前台功能页面,可通过向导的方式完成对页面信息的配置。前台页面部分有三种预制页面布局模板,分别为单表结构、上下主从结构和左树右表主从结构。用户操作时,系统将调用后台服务来完成业务功能。
3 建模平台的实现
数据模型、后台服务这两部分都是通过微软提供的DSL来定义、生成和定制图形语言,从而实现真正的用模型来完成驱动软件开发的目的。完整的数据模型和后台服务DSL设计过程一般包含两个阶段:
其一是为数据模型和后台服务的DSL文法设计域类、域关系及其相应的图形表示。简单地说,就是为数据模型和后台服务语言设计图形、连接器和底层的元模型(包括文字性属性)。
其二是写代码模板,即使用存储在DSL中的实例信息来产生对应的代码。它主要包括编译生成动态链接库dll文件和表视图模型生成到数据库两部分。代码生成通常是基于TextTemplate (.tt)文件的。
创建数据模型DSL(DataModel)需要创建一个Minimal Language模板解决方案,它是包括一个矩形方框类型和一个连线类型的语言模型。后台服务DSL(Service)需要创建一个Task Flow模板解决方案,类似于UML活动图的语言模型,其方框可以被放置在泳道内。DataModel和Set-vice被称为DSL的根。通常情况下,当DSL在设计器中显示时,根由整个图表示。同时,它也是图保存后生成文件的XML树的根。DSL设计器主窗口中也包含两个泳道(列):在左侧的是域模型,包括域类和域关系;右侧定义的是将显示给用户看的图形和连接器。设计域类和域关系时,数据模型包括表、普通视图(配置方式形成视图)、自定义视图(手工书写SQL语句形成视图)域类及其一些属性,后台服务包括开始、结束、增加、删除、修改、查询等操作域类及域关系,并与图形(定义的建模语言的图形标识)映射好,然后在DSL资源管理器中添加到工具箱。数据模型实例文件以XML文件格式存储,元素的表示采用DSL定义中的名称小写格式,而连接则采用元素名称的语法路径方式。
数据模型和后台服务DSL设计器的代码是根据DSL的定义文件产生的。点击Visual Studio主窗口解决方案资源管理器工具栏上的Transfo-rm AllTemplate按钮,可启动代码的自动生成,DataModel和Serice解决方案下的GenerateCode文件夹下有很多扩展名为.tt的文件模板文件,每个.tt文件都有一个自动产生的附属文件,这些附属文件中的所有代码都会被重新生成。此外,还可通过对生成代码添加自定义代码来实现验证约束或者扩展生成设计器的功能。
前台页面的核心是页面信息配置。在信息配置页面中,首先应输入页面编码等信息,然后选择页面所属布局模板类型,再单击“下一步”,进入页面面板配置页面。增加页面时,后台程序首先读取页面配置文件的模式文件,然后根据所选模板类型读取相应的模板标准配置文件(如单表模板),同时生成页面的GUID标识号;如需修改页面配置,后台程序首先要读取页面配置文件的模式文件,然后读取页面对应的配置文件。不管是增加或修改,此时都会生成一个全局数据集gConfigFileDs。此后,单击完成按钮,后台程序会将修改后的gConfigFileDs写回到页面配置文件(该文件的名称为CUID),并调用Lib目录下的解析器生成主JS文件。
页面布局模板类型目前可支持如下三种:
(1)单表结构
页面上只放置一个普通的网格面板,可提供对单表的增删改查功能。
(2)上下主从结构
页面上下各放置一个网格面板,其中上方为主表网格面板,下方为从表网格面板。主表网格面板有增删改查功能,从表网格面板有增删改功能。当单击选择主表网格面板的某一记录行时,从表网格面板就会显示与主表记录相关的所有从表记录。
(3)左树右表主从结构
该结构页面左方放置一个树面板,右方一个网格面板,其中左方面板用于主表显示,右方面板用于从表显示。单点击选中树面板上的某一结点,右方网格面板就会显示与此树结点相关的所有从表记录。
4 结束语
本文利用DSL特定领域语言实现基于模型驱动的MES系统建模平台,该方法可以快速的将业务需求转化为模型,缩短整个系统的开发周期,大量节约人力物力资源。但该建模平台还存在一定的缺陷和不足,就是对一些特别复杂的业务需求不能直接采取配置的方式来实现,而必须通过自己手写代码或者存储过程等才能实现。下一步工作的重点就是解决掉这些缺陷和不足。