一种基于特性数据模型的数据配置方法与流程

文档序号:32442565发布日期:2022-12-06 22:40阅读:33来源:国知局
1.本发明涉及数据处理
技术领域
:,更具体地说涉及一种基于特性数据模型的数据配置方法,实现数据装载、数据检查和数据输出。
背景技术
::2.当前轨道交通行业,很多实时的监控调度系统在运行,其有很多数据需要事先完成相关配置,这些配置数据的完成一般是通过数据配置工具进行完成的。数据配置工具的处理过程如下(参见说明书附图1):根据提供的输入数据接口文件,利用语言提供的数据流api读取特定的接口文件,然后根据自己的开发习惯定义特定的数据结构,装载接口文件数据到内存数据结构中,并对数据正确性进行相关防御性检查,检查通过后根据自身数据规则处理数据得到中间数据,再定义输出文件对应的数据结构,调用相关文件输出流api生成文件。3.现有的数据配置工具逻辑功能处理因人而异、后续维护人员开发成本高,工作任务性质重复繁琐,效率低,不能及时的完成数据处理工具的开发工作。技术实现要素:4.为了克服上述现有技术中存在的缺陷和不足,本发明提供了一种基于特性数据模型的数据配置方法,本发明的发明目的在于解决现有的数据配置工具逻辑功能处理因人而异、后续维护人员开发成本高,工作任务性质重复繁琐,效率低,不能及时的完成数据处理工具的开发工作的问题。本发明针对当前数据配置工作存在的问题,提出了一种基于特性数据模型的数据配置方法,将指定格式输入文件输入到模型生成模块中,模型生成模块调用metaflyserializeclassgenerator可执行文件生成其注入有特性attribute的模型文件;输入的指定格式文件和模型生成模块生成的模型文件一起被输入到数据检查模块,数据检查模块通过注入在模型上得自定义检查特性进行数据检查;检查通过后,输入的指定格式文件和模型生成模块生成的模型文件一起被输入到数据装载模块中;数据装载模块调用fileloader.load接口实现数据装载,然后根据数据自身规则生成中间数据后,在数据输出模块构造注入有serialization相关特性的数据模型,调用fileserializer.serialize输出指定格式的文件。本发明的配置方法,使得工具开发人员从繁琐的数据io处理中解脱出来,只需要关注其具体的逻辑规则处理,提高了工作效率。可以根据需求在任意粒度的目标元素上进行注入,具有很高的拓展性,用户在模型上追加特性十分简单,使用非常简单,学习成本低。模型上自定义特性的声明与实现不会影响原来的程序对数据的处理,拓展性高。5.为了解决上述现有技术中存在的问题,本发明是通过下述技术方案实现的。6.本发明提供了一种基于特性数据模型的数据配置方法,该方法包括以下步骤:s1、将指定格式的输入文件输入到数据配置工具中;s2、数据配置工具中的模型生成模块接收到输入文件后,调用metaflyserializeclassgenerator可执行文件生成与输入文件对应的注入有特性attribute的模型文件;s3、数据配置工具中的数据检查模块接收到输入文件和模型生成模块生成的模型文件,通过注入在模型文件上的自定义检查特性实现数据装载模块前的数据检查;s4、数据配置工具中的数据装载模块接收经数据检查模块检查通过的输入文件和模型文件,调用fileloader.load接口实现数据装载,然后根据数据自身规则生成中间数据,在数据输出模块构造注入有serialization相关特性的数据模型,调用fileserializer.serialize输出指定格式的输出文件。7.进一步优选的,模型生成模块获取到输入文件后,判断输入文件的文件类型,然后根据文件类型判断该输入文件的节点类型,根据节点类型判断结果,得到其节点数据结构,在其对应元素上注入对应特性信息,然后组装数据结构,输出生成对应cs模型文件。8.进一步优选的,数据检查模块对输入文件和模型文件的数据检查是在load接口中完成的,通过利用反射装载对应输入文件,根据自身模型定义的继承自propertytaskattribute任务特性的目标元素,对对应节点数据进行检查,并自定义检查逻辑,检查通过后load装载数据生成model实体数据。9.进一步优选的,所述数据装载模块,通过在模型文件根节点上注入mappingfile特性,反射获取注入在模型类type类型上的特性信息,获取输入文件信息;执行fileloader.load《t》()方法,反射获取t泛型类型信息,将输入文件对应节点同名的节点数据装载纸模型类型数据节点上,完成对应输入文件的装载。10.进一步优选的,根据实际想要输出的文件类型以及文件信息,构造可配置化的输出模型。11.具体处理过程为,通过注入在输出模型根节点上得serializefile特性,获取输出文件类型以及文件名称;根据文件类型,执行getfileserializerimp方法,利用工厂模式,获取对应类型文件的序列化器;根据多态性,执行各自的serialize方法,完成对应文件的序列化输出。12.以par文件为例,执行getfileserializerimp方法得到parserializer实例对象,执行其serialize方法,具体为:构造输出字符串stringbuilder对象stringbulider,执行parprecommentgeneration方法,判断target类型上注入的parprecomment特性,获取其comment信息,组装成注释信息输出。13.遍历追加在target属性集合,当集合上注入parserializeattribute以及其子类特性时,获取对应特性对象parattr,根据多态性,当parattr为partable特性实例时,构造其表头信息追加至stringbulider对象中,执行serialize方法,对追加在其属性集合上的parcolumn特性,利用反射执行getvalue方法,获取模型节点数据,追加至stringbulider对象中,最终输出字符串stringbulider至对应文件中。14.s1步骤中指定格式的输入文件包括ini格式输入文件、par格式输入文件、csv格式输入文件和xml格式输入文件。15.在模型生成模块中,当输入文件为ini格式时,会构造出iniclassbuilder实例,然后执行其load方法装载输入文件模型,ini文件具有根注释节点、章节点、setion节点、普通注释节点和键值对节点,其总结为两大类:叶子节点跟非叶子节点;在其对应元素上分别注commentattribute、chapterattribute、setionattribute、parameterelementattribute,通过这些节点信息去标识一个ini文件,组装ini文件的数据结构,然后输出生成cs模型文件。16.在模型生成模块中,当输入文件为par格式时,会构造出parclassbuilder实例,然后执行其load方法装载输入文件模型,par文件具有根注释节点、表结构节点和普通注释;在对应元素上注入parprecommentattribute、partableattribute、parcolumnattribute和parcommentattribute,特性通过这些节点信息去标识一个par文件,组装par文件的数据结构,然后输出生成cs模型文件。17.在数据检查模块中,以完成xml格式输入文件属性名为a的属性值范围检查为例,使用者首先在对应的数据模型类属性名的节点上注入checkrange特性,然后调用fileloader数据装载接口load,并传入数据模型类,程序会反射实例化模型类,判断注入在模型类型上的特性,当注入有checkrange特性时,会检查xml同名节点数据值是否在checkrange特性指定的范围内;当不在范围内时,报错不输出,反之,则正常载入xml同名节点数据。18.在数据装载模块中,以par格式文件为例,根据t泛型类型,反射实例化该类型,获取t类型属性集合,对追加在其属性上得parserializeattribute以及子类特性进行判断;当为partable时,执行loadsublayer函数,对追加在其parcolumn特性上得属性利用反射设置对应值;当为parcomment时,执行loadparcomments方法,获取特性对象parcomment,根据其parcomment.commentname匹配对应的注释值,利用反射的setvalue方法在对应实例的特性属性上设置注释值。19.在数据输出模块中,以par文件为例,首先在类型目标元素(根节点)上注入serializefile特性,指定输入文件类型以及路径名称;然后根据实际需要输出的情况分别在对应的特性作用域上注入partable、parcolumn、parprecomment和parcomment特性;输出模型特性注入完成后,执行fileserializer.serialize(target)方法,其中target为输出模型数据。20.与现有技术相比,本发明所带来的的有益的技术效果表现在:1、本发明利用c#语言提供的特性机制,通过在模型数据上不同粒度的目标元素上追加特性,实现控制程序处理数据的方式的可配置化;同时metaflyserializeclassgenerator模型类生成工具,使得模型的生成十分方便、简洁;提供简洁的数据load接口和数据序列化输出接口。用户使用非常简单。21.2、通过这种基于特性数据模型的数据配置方法,使得工具开发人员从繁琐的数据io处理中解脱出来,只需要关注其具体的逻辑规则处理,提高了工作效率。可以根据需求在任意粒度的目标元素上进行注入,具有很高的拓展性,用户在模型上追加特性十分简单,使用非常简单,学习成本低。模型上自定义特性的声明与实现不会影响原来的程序对数据的处理,拓展性高。附图说明22.图1为现有数据装配工具的数据装配处理流程图;图2为本发明基于特性数据模型的数据装配方法图;图3为本发明数据装配中模型生成模块的处理流程图;图4为本发明数据装配中数据检查模块的处理流程图;图5为本发明数据装配中数据装载模块的处理流程图;图6为本发明数据装配中数据输出模块的处理流程图。具体实施方式23.下面将结合本发明说明书附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。24.当前轨道交通行业,很多实时的监控调度系统在运行,其有很多数据需要事先完成相关配置,这些配置数据的完成一般是通过数据配置工具进行完成的。数据配置工具的处理过程如图1所示,根据提供的输入数据接口文件,利用语言提供的数据流api读取特定的接口文件,然后根据自己的开发习惯定义特定的数据结构,装载接口文件数据到内存数据结构中,并对数据正确性进行相关防御性检查,检查通过后根据自身数据规则处理数据得到中间数据,再定义输出文件对应的数据结构,调用相关文件输出流api生成文件。25.现有的数据配置工具逻辑功能处理因人而异、后续维护人员开发成本高,工作任务性质重复繁琐,效率低,不能及时的完成数据处理工具的开发工作。26.针对当前数据配置工作存在的问题,此处提出了一种基于特性数据模型的数据配置方法,技术方案如图2所示,该方法包括以下步骤:s1、将指定格式的输入文件输入到数据配置工具中;s2、数据配置工具中的模型生成模块接收到输入文件后,调用metaflyserializeclassgenerator可执行文件生成与输入文件对应的注入有特性attribute的模型文件;s3、数据配置工具中的数据检查模块接收到输入文件和模型生成模块生成的模型文件,通过注入在模型文件上的自定义检查特性实现数据装载模块前的数据检查;s4、数据配置工具中的数据装载模块接收经数据检查模块检查通过的输入文件和模型文件,调用fileloader.load接口实现数据装载,然后根据数据自身规则生成中间数据,在数据输出模块构造注入有serialization相关特性的数据模型,调用fileserializer.serialize输出指定格式的输出文件。27.作为本实施例的一种实施方式,模型生成模块获取到输入文件后,判断输入文件的文件类型,然后根据文件类型判断该输入文件的节点类型,根据节点类型判断结果,得到其节点数据结构,在其对应元素上注入对应特性信息,然后组装数据结构,输出生成对应cs模型文件。28.作为本实施例的又一种实施方式,数据检查模块对输入文件和模型文件的数据检查是在load接口中完成的,通过利用反射装载对应输入文件,根据自身模型定义的继承自propertytaskattribute任务特性的目标元素,对对应节点数据进行检查,并自定义检查逻辑,检查通过后load装载数据生成model实体数据。29.作为本实施例的又一种实施方式,所述数据装载模块,通过在模型文件根节点上注入mappingfile特性,反射获取注入在模型类type类型上的特性信息,获取输入文件信息;执行fileloader.load《t》()方法,反射获取t泛型类型信息,将输入文件对应节点同名的节点数据装载纸模型类型数据节点上,完成对应输入文件的装载。30.作为本实施例的又一种实施方式,根据实际想要输出的文件类型以及文件信息,构造可配置化的输出模型。31.针对当前数据配置工作存在的问题,此处提出了一种基于特性数据模型的数据配置方法,技术方案如图2所示,对于ini、par、csv、xml格式的输入文件,此处会调用metaflyserializeclassgenerator可执行文件生成其注入有特性attribute的模型文件,然后通过注入在模型上的自定义检查特性实现数据装载模块前的数据检查,检查通过后调用fileloader.load接口实现数据装载,然后根据数据自身规则生成中间数据后,在数据输出模块构造注入有serialization相关特性的数据模型,调用fileserializer.serialize输出指定格式的文件。32.各个模块相关流程图如图3至图6所示,具体的,模型生成模块的处理流程如图3所示,metaflyserializeclassgenerator可执行文件用于生成模型类。33.当输入文件为ini时,会构造出iniclassbuilder实例,然后执行其load方法装载输入文件模型,ini文件具有根注释节点、章节点、setion节点、普通注释节点和键值对节点,其总结为两大类:叶子节点跟非叶子节点。我们在其对应元素上分别注commentattribute、chapterattribute、setionattribute、parameterelementattribute,通过这些节点信息去标识一个ini文件,组装ini文件的数据结构,然后输出生成cs模型类;当输入文件为par时,会构造出parclassbuilder实例,然后执行其load方法装载输入文件模型,par文件具有根注释节点、表结构节点、普通注释。我们会在对应元素上注入parprecommentattribute、partableattribute、parcolumnattribute和parcommentattribute,特性通过这些节点信息去标识一个par文件,组装par文件的数据结构,然后输出生成cs模型类。34.同理:xml,csv文件我们也是采用类似的方法,只是其实际的特性信息、特性元素作用的范围、特性数目等信息不同。35.数据检查模块的处理流程如图4所示,数据检查是在load接口中完成的,通过利用反射装载对应输入文件,根据自身模型定义的继承自propertytaskattribute任务特性的目标元素,对对应节点数据进行检查,并自定义检查逻辑。检查通过后load装载数据生成model实体数据。36.以完成xml输入文件属性名为a的属性值范围检查为例。使用者首先在对应的数据模型类属性名的节点上注入checkrange特性,然后调用fileloader数据装载接口load,并传入数据模型类,程序会反射实例化模型类,判断注入在模型类型上的特性,当注入有checkrange特性时,会检查xml同名节点数据值是否在checkrange特性指定的范围内。当不在范围内时,报错不输出。反之,则正常载入xml同名节点数据。37.数据装载模块的处理流程如图5所示,通过在模型根节点上注入mappingfile特性,反射获取注入在模型类type类型上的特性信息,获取输入文件信息。执行fileloader.load《t》()方法,反射获取t泛型类型信息,将输入文件对应节点同名的节点数据装载至模型类型数据节点上,完成对应输入文件的装载。以par文件为例,根据t泛型类型,反射实例化该类型,获取t类型属性集合,对追加在其属性上的parserializeattribute以及子类特性进行判断。38.当为partable时,执行loadsublayer函数,对追加在其parcolumn特性上的属性利用反射设置对应值。39.当为parcomment时,执行loadparcomments方法,获取特性对象parcomment,根据其parcomment.commentname匹配对应的注释值,利用反射的setvalue方法在对应实例的特性属性上设置注释值。40.数据输出模块的处理流程如图6所示,根据实际想要输出的文件类型以及文件信息,构造可配置化的输出模型。相关输出模型特性信息如下表1所示。41.表1常用的序列化输出特性信息以par文件为例,首先在类型目标元素(根节点)上注入serializefile特性,指定输入文件类型以及路径名称。42.然后根据实际需要输出的情况分别在对应的特性作用域上注入partable、parcolumn、parprecomment和parcomment特性。43.输出模型特性注入完成后,执行fileserializer.serialize(target)方法,其中target为输出模型数据。44.具体代码内部处理过程如下:通过注入在输出模型根节点上的serializefile特性,获取输出文件类型以及文件名称。45.根据文件类型,执行getfileserializerimp方法,利用工厂模式,获取对应类型文件的序列化器。46.根据多态性,执行各自的serialize方法,完成对应文件的序列化输出。47.此处以par文件为例,执行getfileserializerimp方法得到parserializer实例对象,执行其serialize方法,具体为:构造输出字符串stringbuilder对象stringbulider,执行parprecommentgeneration方法,判断target类型上注入的parprecomment特性,获取其comment信息,组装成注释信息输出。48.遍历追加在target属性集合,当集合上注入parserializeattribute以及其子类特性时,获取对应特性对象parattr,根据多态性,当parattr为partable特性实例时,构造其表头信息追加至stringbulider对象中,执行serialize方法,对追加在其属性集合上的parcolumn特性,利用反射执行getvalue方法,获取模型节点数据,追加至stringbulider对象中,最终输出字符串stringbulider至对应文件中。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1