一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于自定义bean的多数据源配置与解析方法及装置与流程

2021-10-24 08:54:00 来源:中国专利 TAG:
1.本技术涉及计算机
技术领域
:,特别涉及一种基于自定义bean的多数据源配置与解析方法及装置、计算设备和计算机可读存储介质。
背景技术
::2.在当前游戏开发过程中,配置数据的格式主要为excel数据,它们通常由策划人员通过excel工具生成。在游戏中使用这些配置数据时,通过excel导表工具生成数据和代码,供游戏运行时加载使用。但是在大型项目中,会遇到复杂的配置需求,对于复杂的数据配置,使用传统的excel和excel导表工具不方便配置和识别;另外,大型项目中除了excel配置数据外还存在多种其他格式的配置数据如json、lua等,这些数据通常用来配置复杂的数据场景,如ai、副本等,这会导致配置数据的处理方式不统一;而且由于没有合适的解析工具,甚至需要程序员手动解析这些复杂的配置数据,增加了程序员的工作负担。技术实现要素:3.有鉴于此,本技术实施例提供了一种基于自定义bean的多数据源配置与解析方法及装置、计算设备和计算机可读存储介质,以解决现有技术中存在的技术缺陷。4.根据本技术实施例的第一方面,提供了一种基于自定义结构bean的多数据源配置与解析方法,包括:5.加载元数据定义,元数据定义包括数据源定义和自定义结构bean;6.读取数据源信息,根据自定义结构bean对数据源进行解析;7.将解析后的数据导出为目标格式数据;8.生成用于加载该目标格式数据的目标代码。9.根据本技术实施例的第二方面,提供了一种基于自定义结构bean的多数据源配置与解析装置,包括:10.加载模块,用于加载元数据定义;11.元数据定义文件,包括数据源定义和自定义结构bean;12.解析模块,用于读取数据源信息,根据自定义结构bean对所述数据源进行解析;13.导出模块,用于将解析后的数据导出为目标格式数据;14.生成模块,用于生成用于加载该目标格式数据的目标代码。15.根据本技术实施例的第三方面,提供了一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现所述基于自定义结构bean的多数据源配置与解析方法的步骤。16.根据本技术实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现所述基于自定义结构bean的多数据源配置与解析方法的步骤。17.本技术实施例中,将配置数据的数据项结构通过自定义的结构bean来表达,而且数据项中每一项数据的类型也可以通过自定义的结构bean来表达,使得配置数据不再局限于excel传统表头的方式,也使得配置数据的配置方式可以多样化,而且易于配置。不仅如此,由于本技术实施例中的自定义结构bean引入了oop概念,支持多态结构,使得本方法和系统支持复杂数据结构的表达能力,如ai、技能等配置结构,可以简洁地表达不同数据格式的复杂数据结构并自动生成代码,程序员无需手动解析。而且由于本方法和系统支持所有常见的配置数据数据源,在大型游戏项目中,即使存在多种格式的配置数据,也可以使用统一的解决方案进行处理和解析。附图说明18.图1是本技术实施例提供的计算设备的结构框图;19.图2是本技术实施例提供的基于自定义bean的多数据源配置与解析方法的流程图;20.图3是本技术实施例提供的配置数据表的一示意图;21.图4是本技术实施例提供的配置数据表的另一示意图;22.图5是本技术实施例提供的基于多态的配置数据表的一示意图;23.图6是本技术实施例提供的基于多态的配置数据表的另一示意图;24.图7是本技术实施例提供的游戏ai配置数据表的一示意图;25.图8是本技术实施例提供的生成的目标代码的一示意图;26.图9是本技术实施例提供的基于自定义bean的多数据源配置与解析装置的结构示意图。具体实施方式27.在下面的描述中阐述了很多具体细节以便于充分理解本技术。但是本技术能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本技术内涵的情况下做类似推广,因此本技术不受下面公开的具体实施的限制。28.在本技术一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本技术一个或多个实施例。在本技术一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本技术一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。29.应当理解,尽管在本技术一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本技术一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“响应于确定”。30.在本技术中,提供了一种基于自定义bean的多数据源配置与解析方法及装置、计算设备和计算机可读存储介质,在下面的实施例中逐一进行详细说明。31.图1示出了根据本技术一实施例的计算设备100的结构框图。该计算设备100的部件包括但不限于存储器110和处理器120。处理器120与存储器110通过总线130相连接,数据库150用于保存数据。32.计算设备100还包括接入设备140,接入设备140使得计算设备100能够经由一个或多个网络160通信。这些网络的示例包括公用交换电话网(pstn)、局域网(lan)、广域网(wan)、个域网(pan)或诸如因特网的通信网络的组合。接入设备140可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(nic))中的一个或多个,诸如ieee802.11无线局域网(wlan)无线接口、全球微波互联接入(wi‑max)接口、以太网接口、通用串行总线(usb)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc)接口,等等。33.在本技术的一个实施例中,计算设备100的上述部件以及图1中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图1所示的计算设备结构框图仅仅是出于示例的目的,而不是对本技术范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。34.计算设备100可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或pc的静止计算设备。计算设备100还可以是移动式或静止式的服务器。35.其中,处理器120可以执行图2所示的基于自定义结构bean的多数据源配置与解析方法中的步骤。图2示出了根据本技术一实施例的基于自定义结构bean的多数据源配置与解析方法的流程图,包括步骤202至步骤208。36.步骤202:加载元数据定义,元数据定义包括数据源定义和自定义结构bean。37.在一种具体的实施方式中,元数据的定义如代码所示:[0038][0039]上述定义中的<table>标签表示数据源信息,<table>标签中的name为数据表的名称,value为数据源中的数据项属性,用于配置数据源中所有数据项的结构。[0040]上述定义中的<bean>标签为自定义结构bean,其包括了多个数据项子标签<var>。数据项子标签<var>包括一个name属性和一个type类型属性。在上述代码中,自定义结构bean包含一个int型的数据项和一个vector3的数据项。vector3有三个字段floatx,floaty,floatz,用于表示坐标之类的数据。[0041]进一步的,在该实施例中,数据源中数据项属性value的属性值为自定义结构bean的名称“item”,即数据表tbitem的数据项结构包括一个int型和一个vector3型,名称分别“id”和“loc”。[0042]与上述元数据定义对应的数据表如图3所示。[0043]在该实施例中,使用自定义结构的bean来表达配置数据的结构。在自定义结构bean的子标签中,type类型属性不仅支持int型,也同时支持其他常见的但不被excel工具所支持的系统类型,如下所示:[0044]●基础内置类型[0045]‑bool,byte,short,fshort,int,fint,long,flong,float,double,string,text,bytes[0046]‑vector2,vector3,vector4[0047]‑datetime[0048]●可空类型[0049]‑bool?,byte?,short?,fshort?,int?,fint?,long?,flong?,float?,double?[0050]‑vector2?,vector3?,vector4?[0051]‑datetime?[0052]‑<枚举>?[0053]●自定义枚举enum及相应可空类型[0054]●自定义常量const[0055]上述系统类型并非穷举,常用的系统类型由本领域技术人员所熟知,在此不再赘述。由于支持完备的系统类型,本实施例解决了复杂数据结构在excel中难以表达的问题。[0056]在另一种具体的实施方式中,元数据的定义包括另一种自定义结构bean,如代码所示:[0057][0058]其中,数据表tbdemobean的数据项属性value的值为自定义结构bean的名称"demobeantable",即数据表tbdemobean的数据项结构由自定义结构bean“demobeantable”定义。[0059]进一步的,自定义结构bean“demobeantable”包括2个数据项,其中第二个数据项<varname="range"type="intrange"/>的type类型属性的属性值为另一个公共的自定义结构bean“intrange”,而自定义结构bean“intrange”中包括两个int型数据项,分别表示intrange的最小值和最大值。[0060]在该实施例中,由于自定义结构bean中的数据项的类型不仅可以是常规的系统类型,还可以是另一个自定义结构bean,因此可以解析更加复杂的数据结构;而且相对于传统的excel来说,可以使策划人员通过多级标题头来表达复杂的嵌套数据结构,例如数据级别较深的数据。[0061]与上述元数据定义中的数据表tbdemobean对应的数据表如图4所示,数据表tbdemobean包括两个数据项id和range,而数据项range自身也包括两个int型的数据项,用来表达最小值和最大值。而且通过多级标题头的方式,策划人员方便在复杂的表格中准确定位数据项,减少了数据填错行的问题。[0062]在该实施例中,本领域技术人员应当知晓,在上述自定义结构bean“intrange”中,其包括的数据项子标签的type类型属性同样可以是其他的自定义结构bean,以支持多层的数据结构,在此不再赘述。[0063]在另一种实施方式中,元数据的定义包括另一种自定义结构bean,该自定义结构bean为多态结构bean,如代码所示:[0064][0065][0066]在上述定义中,数据表tbdemoshape的数据项结构由自定义结构bean“shapetable”定义。自定义结构bean“shapetable”中的第二个数据项<varname="shape"type="shape"/>的type类型属性的属性值为公共的多态结构bean“shape”。[0067]进一步的,多态结构bean“shape”包括一个子bean"circle"和一个子bean"rectangle",上述"circle"bean和"rectangle"bean均继承自bean“shape”。[0068]进一步的,"circle"bean和"rectangle"bean都继承了多态结构bean“shape”中的数据项<varname="id"type="int"/>。同时,"circle"bean和"rectangle"bean自身所包括的数据项并不相同,其中"circle"bean包含一个用于定义半径的radius数据项,而"rectangle"bean则包含了定义长和宽的两个数据项。[0069]在该实施例中,通过多态结构bean的方式,进一步提高了复杂数据配置的方便程度。在实际应用中,数据项有多种类型,每种类型之间会存在公共数据项,也有不同的数据项。如果用一个结构包含所有数据项,这种方式在类型较少时能勉强支撑,但如果类型数量很多,数据项个数变化很大时,会导致复合结构体过于庞大笨拙,故而难以在实际工程中采用。[0070]本实施例在元数据定义中引入了oop中类型继承的概念,实现了多态结构bean,可以方便地表达复杂配置需求。与上述元数据中的数据表tbdemoshape对应的数据表如图5所示。[0071]策划人员在进行复杂的数据项类型配置时,只需要在表格中填入多态bean的名称(如circle或rectangle),就可以实现在同一数据项(shape)下实现不同类型数据的填入,极大的提高了策划人员的工作效率。[0072]在另一种实施方式中,多态结构bean支持别名。如下代码所示:[0073]<beanname="rectangle"alias="长方形">[0074]因此策划人员在填写数据时即可使用英文也可以使用中文,当使用别名时,即使需要调整数据项的名称,对策划人员的工作也没有影响,因为策划人员在表格中填写的是别名。策划人员在使用别名时的数据表如图6所示。[0075]在另一种实施方式中,元数据的定义包括复杂的多态结构bean,用于表达其他复杂的数据结构。[0076]在大型游戏项目如mmorpg中,一部分复杂的数据配置是由自定义的编辑器产生,一般为json或lua等格式,这些配置数据无法被传统的excel导表工具识别,导致程序员不得不程序手动处理。如游戏对象的ai通常使用行为树(behaviortree)来配置,行为树中包含各种子节点,不同类型的子节点代表不同的行为。行为树通常使用外部脚本文件如lua保存,程序员需要手动解析。[0077]而通过本实施例中多态bean的方法,图7中的数据可以方便地被解析。基于多态bean的ai模块元数据定义如下代码所示:[0078][0079][0080][0081][0082]在上述元数据定义中,数据表tbbehaviortree包括一个节点behaviortree。behaviortree为一个自定义结构bean,其除了包括多个系统类型的数据项外,还包括一个类型为composenode的数据项节点。[0083]composenode继承flownode,flownode继承node。composenode自身包括子bean<sequence>和<selector>。其中,子bean<sequence>通过数据项<varname="children"type="list,flownode"/>来表示其可以包括多个子节点,而每个子节点的类型都为flownode。[0084]如图7所示,在该数据中,root节点的类型是composenode,其继承node和flownode,因此root节点具有node的公共数据项id和name、flownode的公共数据项decorators和services。同时,该节点的类型为sequence,因此具备多个类型为flownode的子节点。[0085]在本实施例中,当游戏项目中存在不适合excel编辑的配置数据时(比如技能、ai等数据一般通过专用编辑器来编辑和导出),使用本实施例的方法可以快速的对这些数据进行解析,统一导出数据和生成代码。由于本实施例的方法同时支持excel族、xml、json、lua等多种数据源,不会造成游戏内有多种配置数据处理方案。[0086]从上述多个实施例可以得知,本技术采用自定义结构bean和多态结构bean这种统一的定义方式,既实现了传统excel不方便表达复杂数据结构的问题,也实现了多种不同数据格式的统一快速解析。本技术的方法加载元数据定义后,根据每个表的数据源信息,从相应文件读取数据,无论数据源是xlsx、json还是其他格式,都被解析成统一的内存格式。[0087]步骤204:读取数据源信息,根据自定义结构bean对数据源进行解析。[0088]在一种具体实施方式中,从元数据的定义中读取一个或多个数据源。如代码所示:[0089]<tablename="tbitem"value="item"input="item/item1.xlsx,item/item2.xlsx">[0090]通过excel文件1,excel文件2...的方式指定数据表的数据来自多个文件,不同文件以逗号","分隔。当数据源为excel文件,并且没有来指定单元表时,该excel文件的中的所有单元表都会被读入。本领域技术人员应当知晓,上述excel文件也可以是其他格式的文件。[0091]在另一种具体实施方式中,通过<单元表名>@excel文件的方式指定数据来自excel文件的某个单元表,可以指定多个单元表,通过逗号","分隔,如代码所示:[0092]<tablename="tbitem"value="item"input="table1@item1.xlsx,table3@item2.xlsx">[0093]示例中数据表tbitem的数据来自excel文件item1的table1单元表和item2的table3单元。[0094]在另一种具体实施方式中,数据表的数据来自目录下的所有文件。[0095]当以目录为数据源时,会遍历整个目录树中所有文件,读入每个文件中的数据。如果是excel族的数据,会从每个文件中读取多个记录,如果是xml、lua、json族的数据,每个文件当作一个记录读入。可以有指定多个目录同时为数据源,以逗号","分隔。如代码所示:[0096]<tablename="tbitem"value="item"input="test/data">。[0097]步骤206:将解析后的数据导出为目标格式数据。[0098]在该步骤中,将导出数据格式与原始数据解耦。无论源数据是excel、lua、xml、json或者它们的混合,最终都被以统一的格式导出,极大简化了生成代码的复杂性。目前支持的导出格式包括但不限于:[0099]●binary格式[0100]●json格式[0101]●lua格式[0102]在大多数项目中,导出给前后端的数据并非完全相同。有些表可能仅仅前端或者后端需要,有些字段也可能仅仅前端或者后端需要。[0103]因此,在一种具体的实施方式中,该步骤支持表级别分组导出。在元数据定义中,定义方式为在table中定义group属性,如果未定义group,默认导出给所有分组,如果定义group,则只导出给指定分组,可以导出给多个分组,以逗号","分隔。如下代码所示:[0104]<tablename="tbitem1"value="item1"group=”c”input="test/data">[0105]<tablename="tbitem2"value="item2"group=”s”input="test/data">。[0106]<tablename="tbitem3"value="item3"group=”c,s”input="test/data">。[0107]在该定义中,tbitem1表只给客户端使用,tbitem2只能服务器使用,tbitem3只给editor使用。[0108]在另一种具体的实施方式中,该步骤还支持字段级别分组。在元数据定义中,定义方式为给bean中的数据项标签<var>指定group属性,未指定则默认导出给所有分组,可以为多个,以逗号","分隔。相比于大多数导表工具只支持表顶级字段的分组导出,本实施例的方法支持任意bean字段粒度级别的分组导出,如下代码所示:[0109][0110][0111]在该定义中,x1属于所有分组,x2属于客户端分组,x3属于服务器端分组,x4同时属于客户端和服务器端。[0112]步骤208:生成用于加载该目标格式数据的目标代码。[0113]在该步骤中,生成最终的目标代码供程序员调用。当程序员需要读取配置数据时,无需手动编写配置数据的解析代码,直接使用上述目标代码中的面向对象的方法来获取数据,使用代码类来表达对应的数据结构并加载到内存,供程序员方便调用。其中,生成的目标代码种类包括但不限于:[0114]●c [0115]●go[0116]●java[0117]●c#[0118]●lua[0119]●typescript[0120]●python[0121]在一种具体实施方式中,例如生成的c#代码中,在代码入口处,通过一行代码将步骤206生成的目标格式数据加载到内存中,如下代码所示:[0122][0123]上述代码将所有的配置数据都加载到tables对象中。tables类为自定义类,其包括了游戏中所有的类型,如图8所示。[0124]当程序员需要调用配置数据时,直接调用所需对象的get方法即可。[0125]通过本技术的实施例,使用统一的元数据定义定义游戏的配置数据结构,开发人员可以自由选择合理的编辑器和数据文件类型来保存配置。本方法根据元数据定义和配置数据内容,无区分地统一处理所有配置数据文件,生成标准的导出数据文件以及根据前后端使用的平台、引擎和语言,生成合适代码,使得策划人员可以方便使用各种编辑器来制作简单到复杂的数据;也使得程序开发人员在前后端程序中直接使用生成好的代码,不需要写任何解析处理配置的代码,极大地提高了开发的效率。[0126]与上述方法实施例相对应,本技术还提供了一种基于自定义bean的多数据源配置与解析装置的实施例,图9示出了一种基于自定义bean的多数据源配置与解析装置的结构示意图。如图9所示,该装置900包括:[0127]加载模块,用于加载元数据定义;[0128]元数据定义,包括数据源定义和自定义结构bean;[0129]解析模块,用于读取数据源信息,根据自定义结构bean对数据源进行解析;[0130]导出模块,用于将解析后的数据导出为目标格式数据;[0131]生成模块,用于生成用于加载该目标格式数据的目标代码。[0132]可选的,元数据定义中,所述数据源定义包括数据项属性,所述数据项属性用于配置数据源中数据项的结构;所述数据项属性的属性值为所述自定义结构bean的名称;所述自定义结构bean包括至少一个数据项子标签;[0133]可选的,所述数据项子标签的类型属性值为多个自定义结构bean之一;[0134]可选的,所述自定义结构bean为多态结构bean;在所述多态结构bean中,包括一个或多个继承自该多态结构bean的子多态结构bean;[0135]可选的,在所述多态结构bean中,每个子多态结构bean为所述多态结构bean的一个子标签;[0136]可选的,所述多态结构bean同时包括数据项子标签和子多态结构bean;不同子多态结构bean中的数据项子标签的数量相同或不同。[0137]上述为本实施例的一种基于自定义结构bean的多数据源配置与解析装置的示意性方案。需要说明的是,该一种基于自定义结构bean的多数据源配置与解析装置的技术方案与上述的一种基于自定义结构bean的多数据源配置与解析方法的技术方案属于同一构思,一种基于自定义结构bean的多数据源配置与解析装置的技术方案未详细描述的细节内容,均可以参见上述一种基于自定义结构bean的多数据源配置与解析方法的技术方案的描述。[0138]本技术一实施例中还提供一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现所述的一种基于自定义结构bean的多数据源配置与解析方法的步骤。[0139]上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的一种基于自定义结构bean的多数据源配置与解析方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述一种基于自定义结构bean的多数据源配置与解析方法的技术方案的描述。[0140]本技术一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现如前所述一种基于自定义结构bean的多数据源配置与解析方法的步骤。[0141]上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的一种基于自定义结构bean的多数据源配置与解析方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述一种基于自定义结构bean的多数据源配置与解析方法的技术方案的描述。[0142]上述对本技术特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。[0143]所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read‑onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。[0144]需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本技术并不受所描述的动作顺序的限制,因为依据本技术,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本技术所必须的。[0145]在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。[0146]以上公开的本技术优选实施例只是用于帮助阐述本技术。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本技术的内容,可作很多的修改和变化。本技术选取并具体描述这些实施例,是为了更好地解释本技术的原理和实际应用,从而使所属
技术领域
:技术人员能很好地理解和利用本技术。本技术仅受权利要求书及其全部范围和等效物的限制。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜