公开/公告号CN102270138A
专利类型发明专利
公开/公告日2011-12-07
原文格式PDF
申请/专利权人 青岛海信传媒网络技术有限公司;
申请/专利号CN201110233116.6
发明设计人 金崇华;
申请日2011-08-15
分类号G06F9/44(20060101);
代理机构11274 北京中博世达专利商标代理有限公司;
代理人申健
地址 266071 山东省青岛市崂山区香港东路248号131室
入库时间 2023-12-18 03:55:54
法律状态公告日
法律状态信息
法律状态
2014-06-11
授权
授权
2012-01-25
实质审查的生效 IPC(主分类):G06F9/44 申请日:20110815
实质审查的生效
2011-12-07
公开
公开
技术领域
本发明涉及面向对象的软件开发领域,尤其涉及实体对象的创建 方法和实体对象创建装置。
背景技术
面向对象是当前主流的软件开发方法之一。在面向对象的系统中, 实体对象用来表示现实世界中具体的业务实体,软件系统中数据的持 久化,业务过程的执行和用户界面都与实体对象有关,例如在Java平 台中,通常使用POJO(普通JAVA对象,Plain Ordinary Java Objects) 对象或EJB中的实体Bean来表示实体对象。
在目前常规的面向对象软件开发方法中,对于实体对象,一般在 设计期由开发人员开发实体对象的代码,并在软件系统的其他部分调 用,这样使整个系统具备了实体对象的相关性,使软件系统的通用性 降低。
在考虑软件系统的通用性方面的问题时,现有的技术主要着眼于 实体对象的动态加载,以及实体对象之间关系的动态配置,这些方法 能解决软件系统通用性方面的一部分问题,但实体对象源代码仍然需 要由开发人员在设计期进行开发,当实体对象在运行期发生变更时, 需要在设计期重新对实体对象源代码进行开发,从而增加了软件系统 的开发成本,减小了软件系统的使用寿命。
发明内容
本发明实施例提供一种实体对象的创建方法和实体对象创建装 置,能够减小软件系统的开发成本,增加软件系统的使用寿命。
本发明一方面提供一种实体对象的创建方法,包括:存储描述实 体对象的元数据;在软件系统的运行期,根据模板、元数据和基类生 成实体对象的源代码,所述模板表示实体对象源代码的生成策略;将 所述源代码编译成实体对象的字节码;加载所述实体对象的字节码, 并对所述实体对象的字节码中所定义的类实例化,以完成实体对象的 创建。
本发明另一方面提供一种实体对象创建装置,包括:存储单元, 用于存储描述实体对象的元数据;源代码生成单元,用于在软件系统 的运行期,根据模板、元数据和基类生成实体对象的源代码,所述模 板表示实体对象源代码的生成策略;编译单元,用于将所述源代码编 译成实体对象的字节码;加载单元,用于加载所述实体对象的字节码, 并对所述实体对象的字节码中所定义的类实例化,以完成实体对象的 创建。
本发明通过在软件系统的运行期,根据模板、元数据和基类生成 实体对象的源代码可将源代码的生成从传统的设计期延迟到了运行 期,并将所生成的实体对象的源代码编译,加载编译之后生成字节码, 并对字节码中所定义的类实例化以完成实体对象的创建,能够在软件 系统的运行期动态创建实体对象,且实体对象在运行期发生变更时, 无需重新开发实体对象的源代码,从而减小软件系统的开发成本,增 加软件系统的使用寿命。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实 施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面 描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲, 在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实体对象创建方法实施例的流程图;
图2为本发明实体对象创建方法实施例的具体流程图;
图3为本发明实体对象创建装置的结构框图;
图4为本发明实体对象创建装置中的源代码生成单元的结构框图;
图5为图4中的模板选择和加载模块的结构框图;
图6为图4中的解析模块的结构框图;
图7为图3中的加载单元的结构框图;
图8为图7中的实例化模块的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例的技术方案 进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部 分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普 通技术人员在没有做出创造性劳动的前提下所获得的所有其它实施 例,都属于本发明保护的范围。
实施例1:
本实施例提供一种实体对象的创建方法,包括:
S11,存储描述实体对象的元数据;
S12,在软件系统的运行期,根据模板、元数据和基类生成实体对 象的源代码,所述模板表示实体对象源代码的生成策略;
S13,将所述源代码编译成实体对象的字节码;
S14,加载所述实体对象的字节码,并对所述实体对象的字节码中 所定义的类实例化,以完成实体对象的创建。
本发明实施例通过在软件系统的运行期,根据模板、元数据和基 类生成实体对象的源代码可将源代码的生成从传统的设计期延迟到了 运行期,并将所生成的实体对象的源代码编译,加载编译之后生成字 节码,并对字节码中所定义的类实例化以完成实体对象的创建,能够 在软件系统的运行期动态创建实体对象,且实体对象在运行期发生变 更时,无需重新开发实体对象的源代码,从而减小软件系统的开发成 本,增加软件系统的使用寿命。
可选地,S12中在软件系统的运行期,根据模板、元数据和基类生 成实体对象的源代码具体包括:
在软件系统的运行期,根据实体对象的元数据选择对应模板并加 载此对应模板;
根据所述对应模板中实体对象源代码的生成策略相应地选择基 类,所述基类被实体对象继承以使所述实体对象具有所述基类的属性 和方法;
其中,所述对应模板中实体对象源代码的生成策略可体现出类元 数据中基类的结构类型,基类的选择是根据类元数据中基类的结构类 型来确定,基类的结构类型包括:普通结构、树型结构和顺序结构; 基类是实体对象的父类,而基类对于软件系统而言是可知的,通过调 用基类的方法,可实现对实体对象的通用处理;
对所述对应模板中的源代码进行解析以生成实体对象的源代码。
进一步地,所述在软件系统的运行期,根据实体对象的元数据选 择对应模板并加载此对应模板具体包括:
在软件系统的运行期,根据实体对象的元数据,判断所述实体对 象所属的类的类型;
根据所述实体对象所属的类的类型选择与此类的类型对应的模 板,并加载此对应模板。
其中,不同的类的类型可对应不同的类源代码模板,配置类元数 据时可以选择创建类源代码使用的模板,该过程由开发人员在创建元 数据时根据类的类型编写相应的源代码完成,在软件系统的运行期可 直接使用。
可选地,所述对所述对应模板中的源代码进行解析以生成实体对 象的源代码具体包括:
对所述对应模板中的源代码进行解析以识别出所述对应模板源代 码中的变量和语句;
加载与所述对应模板源代码中的所述变量和语句相关的元数据;
将所述对应模板源代码中的变量替换为与所述变量相关的元数 据,并将所述对应模板源代码中的语句替换为与所述语句相关的元数 据,替换后生成实体对象的源代码。
可选地,S14中,所述加载所述实体对象的字节码包括:
根据元数据,采用关联加载策略加载所述实体对象的字节码。
进一步地,所述根据元数据,采用关联加载策略加载所述实体对 象的字节码具体包括:
根据元数据,对所述实体对象的所有属性进行遍历;
判断所遍历的所有属性的数据类型是否关联其他实体类;
若关联,则加载所述其他实体类直至所述所遍历的所有属性的数 据类型都不再关联其他实体类;
加载所述实体对象的字节码。
为了更好的理解本发明实施例所采用的技术方案,下面通过本发 明实体对象创建方法的具体实施例来更详细地描述本发明。
实施例2:
本实施例提供的实体对象创建方法具体包括:
S21,存储描述实体对象的元数据;
元数据是对实体对象的关键抽象,描述实体对象的结构信息,元 数据以类元数据为核心,组织实体对象各方面的信息;
所述描述实体对象的元数据包括:类元数据、持久化对象属性元 数据、值对象属性元数据和关联元数据;
针对不同元数据分别作如下说明:
类元数据:类元数据是元数据的核心,描述实体对象的基本信 息,并组织实体对象各方面的元数据信息,包括:属性、关联、 操作等。
持久化对象属性元数据:持久化对象属性元数据从持久化的角 度表示实体对象的特征,持久化对象属性包括属性名称、属性 数据类型、映射的字段名等。
值对象属性元数据:值对象属性元数据从值处理的角度表示实 体对象的特征,值对象属性包括:属性名称,属性的可见性、 属性值处理类型等。
关联元数据:关联元数据描述实体对象和其他实体对象之间的 关联关系,关联元数据包括:关联的类名、关联方式以及关联 属性的映射关系等。
除了所列出的各种元数据之外,可选地,所述描述实体对象的元 数据还可进一步包括操作元数据,用于描述实体对象提供的操作,包 括操作方法名、操作类型、操作方法的参数等;
可通过建立元数据信息库来存储描述实体对象的元数据,可选地, 元数据信息库可以采用XML(可扩展标记语言,Extensible Markup Language)文件或数据库的形式,所述元数据信息库可由开发人员在 源代码设计阶段编写源代码或编写配置程序生成;
S22,在软件系统的运行期,根据实体对象的元数据,判断所述实 体对象所属的类的类型;
需要指出的是,所述在软件系统的运行期,即表明后续所作的动 作是针对在软件系统运行的过程中而作出的;
S23,根据所述实体对象所属的类的类型选择与此类的类型对应的 模板,并加载此对应模板;
其中,所述模板表示生成源代码的生成策略,所述生成策略包括 源代码的生成格式;不同的类的类型可对应不同的类源代码模板,配 置类元数据时可以选择创建类源代码使用的模板,该过程由开发人员 在创建元数据时根据类的类型编写相应的源代码完成,在软件系统的 运行期可直接使用;
下面给出一段应用于Java平台的模板代码的实例:
S24,根据所述对应模板中实体对象源代码的生成策略相应地选择 基类,所述基类被实体对象继承以使所述实体对象具有所述基类的属 性和方法;
基类是生成的实体对象的父类,基类中有实体对象公用的方法, 基类对于软件系统而言是可知的,可通过对实体对象基类的调用,来 访问实体对象;
其中,所述对应模板中实体对象源代码的生成策略可体现出类元 数据中基类的结构类型,基类的选择是根据类元数据中基类的结构类 型来确定,基类的结构类型如下图所示包括:普通结构、树型结构和 顺序结构;
S25,对所述对应模板中的源代码进行解析以识别出所述对应模板 源代码中的变量和语句;
S26,加载与所述对应模板源代码中的所述变量和语句相关的元数 据;
所述与所述对应模板源代码中的所述变量和语句相关的元数据已 在设计阶段预先配置;
S27,将所述对应模板源代码中的变量替换为与所述变量相关的元 数据,并将所述对应模板源代码中的语句替换为与所述语句相关的元 数据,替换后生成实体对象的源代码;
其中,S27中替换完成后,在内存中创建的源代码被写入到文件中, 所述文件存放的路径依照元数据中类所在的包路径,文件的名称为实 体对象的名称,所述创建的源代码被写入到文件中后即完成实体对象 源代码的生成过程。
S28,将所述生成的实体对象的源代码编译成实体对象的字节码;
S29,采用关联加载策略加载所述实体对象的字节码,并对所述实 体对象的字节码中所定义的类实例化,以完成实体对象的创建。
其中,采用关联加载策略加载所述实体对象的字节码具体包括: 根据元数据,对所述实体对象的所有属性进行遍历;判断所遍历的所 有属性的数据类型是否关联其他实体类;若关联,则加载所述其他实 体类直至所述所遍历的所有属性的数据类型都不再关联其他实体类。
待实体对象创建完成后,即可采用现有的对象关系映射(ORM)和反 射机制来访问实体对象和关系型数据库。
本实施例依据元数据、基类和模板,能够在软件系统的运行期动 态创建实体对象的源代码,将实体对象的产生过程由常规的设计期延 后到了运行期,使软件系统不依赖于具体的实体对象,因而提高了软 件系统的扩展能力和复用性能。同时,采用元数据描述软件系统的实 体对象,在实体对象的创建、加载和应用过程中采用统一的模型,减 少软件系统对实体对象的依赖。这样,在开发阶段无需创建具体的实 体类,只需定义实体类的元数据,减小了软件系统的开发成本,同时 又因本发明实现的技术架构或软件系统能很方便的在不同的业务环境 中得以重用,因而也增加了软件系统的使用寿命。
与上述本发明实体对象创建方法相对应,此外,本发明还提供一 种实体对象创建装置200,如图3所示,包括:
存储单元201,用于存储描述实体对象的元数据;
源代码生成单元202,用于在软件系统的运行期,根据模板、元数 据和基类生成实体对象的源代码,所述模板表示实体对象源代码的生 成策略;
编译单元203,用于将所述源代码编译成实体对象的字节码;
加载单元204,用于加载所述实体对象的字节码,并对所述实体对 象的字节码中所定义的类实例化,以完成实体对象的创建。
本实施例通过在软件系统的运行期,由源代码生成单元202根据 模板、元数据和基类生成实体对象的源代码可将源代码的生成从传统 的设计期延迟到了运行期,并由编译单元203将所生成的实体对象的 源代码编译,由加载单元204加载编译之后生成的字节码,并对字节 码中所定义的类实例化以完成实体对象的创建,能够在软件系统的运 行期动态创建实体对象,且实体对象在运行期发生变更时,无需重新 开发实体对象的源代码,从而减小软件系统的开发成本,增加软件系 统的使用寿命。
可选地,在本发明的一实施例中,如图4所示,所述源代码生成 单元202包括:
模板选择和加载模块2021,用于在软件系统的运行期,根据实体 对象的元数据选择对应模板并加载此对应模板;
基类选择模块2022,用于根据所述对应模板中实体对象源代码的 生成策略相应地选择基类,所述基类被实体对象继承以使所述实体对 象具有所述基类的属性和方法;
解析模块2023,用于对所述对应模板中的源代码进行解析以生成 实体对象的源代码。
进一步地,如图5所示,所述模板选择和加载模块2021包括:
判断子模块20211,用于在软件系统的运行期,根据实体对象的元 数据,判断所述实体对象所属的类的类型;
选择子模块20212,用于根据所述实体对象所属的类的类型选择与 此类的类型对应的模板;
加载子模块20213,用于加载此对应模板。
更进一步地,如图6所示,所述解析模块2023包括:
解析子模块20231,用于对所述对应模板中的源代码进行解析以识 别出所述对应模板源代码中的变量和语句;
加载子模块20232,用于加载与所述对应模板源代码中的所述变量 和语句相关的元数据;
替换子模块20233,用于将所述对应模板源代码中的变量替换为与 所述变量相关的元数据,并将所述对应模板源代码中的语句替换为与 所述语句相关的元数据,替换后生成实体对象的源代码。
可选地,在本发明的一实施例中,如图7所示,所述加载单元204 包括:
加载模块2041,用于加载实体对象的字节码;
实例化模块2042,用于对所述实体对象的字节码中所定义的类实 例化。
进一步地,如图8所示,所述实例化模块2042包括:
遍历子模块20421,用于根据元数据,对所述实体对象所属实体类 的所有属性进行遍历;
判断子模块20422,用于判断所遍历的所有属性的数据类型是否关 联其他实体类;
加载和实例化子模块20423,用于在判断子模块的判断结果为关联 时,加载所述其他实体类并实例化直至所述所遍历的所有属性的数据 类型都不再关联其他实体类。
综上所述,本发明实体对象创建方法和装置,通过在软件系统运 行时,根据元数据、模板和基类动态创建实体对象,使得在开发阶段 无需创建具体的实体类,而只需定义实体类的元数据,大大减小了软 件系统的开发成本。同时,由于在开发阶段实体对象不可知,实现的 技术架构或软件系统的其他部分不依赖于具体的实体对象,使得在此 基础上实现的技术架构或软件系统能很方便的在不同的业务环境中得 以重用,从而提高了软件系统的复用能力和扩展性能,起到降低维护 成本和延长软件系统使用寿命的作用。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并 不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范 围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。 因此,本发明的保护范围应以权利要求的保护范围为准。
机译: 基于复制相似实体的对象的对象创建
机译: 基于事件的实体和对象创建
机译: 实体和框架制造设备的扩展计划创建方法和装置,实体,实体的制造设备和方法以及程序