CN105630489B - 数据处理方法和数据处理装置 - Google Patents
数据处理方法和数据处理装置 Download PDFInfo
- Publication number
- CN105630489B CN105630489B CN201510962570.3A CN201510962570A CN105630489B CN 105630489 B CN105630489 B CN 105630489B CN 201510962570 A CN201510962570 A CN 201510962570A CN 105630489 B CN105630489 B CN 105630489B
- Authority
- CN
- China
- Prior art keywords
- service
- description
- business
- type
- attribute
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提出了一种数据处理方法和数据处理装置,其中,所述数据处理方法包括:定义系统的抽象数据实体对象、派生业务实体对象、所述派生业务实体对象的业务类型描述和多个业务属性的业务属性描述;在所述系统的运行时刻,判断所述系统的业务需求是否发生变动;在判断结果为是时,修改所述派生业务实体对象的业务类型描述和业务属性描述。通过本发明的技术方案,不仅可以提高软件产品在开发过程中代码的复用性,而且可以提升开发出的软件产品的灵活性产品本身的灵活性。
Description
技术领域
本发明涉及软件开发技术领域,具体而言,涉及一种数据处理方法和一种数据处理装置。
背景技术
目前,在各类软件系统的设计开发过程中,为了节约研发及维护成本,系统的柔性、灵活性,模块的复用性、复用程度一直是设计和编码人员努力去提升的指标之一,而型别抽象则是最重要,也是最常用的思路。针对目前普遍使用的若干面向对象语言(如:C++,Java,C#等),利用面向对象语言的特点:派生、继承,多态、重载等配合特定设计模式实现;同时各类开发语言也加入了泛型特性,帮助开发人员提升代码的灵活性和复用性。
这些面向对象语言允许开发者使用继承和向上映射(Up Casting)进行型别抽象,并提供相应的转型函数,或强制向下转型。泛型则将类型参数化,允许开发者对代码模块进行型别注入,在保证类型安全的基础上提高了代码复用程度。
以上特性在实际开发过程中极大程度的增加了代码复用性,但仍然存在一些局限。使用Java语言利用泛型特性编写了一个数据存取模块类class EntityDAO<T>,使用时,以派生业务实体对象“用户”(User)为例,首先需要在代码中定义“用户”User类型,其次要将User类型传入EntityDAO<User>。前端模版需要根据不同的派生业务实体对象组装、制作,如图1所示,“用户编辑界面”,“订单编辑界面”,即业务对象的型别特性需要在代码里表现,尽管已经进行了抽象提炼:型别参数化,显示模版化,但是在一定程度上还是存在代码的重复编写。
而且信息系统中的派生业务实体对象抛开特定的业务功能,基本上都会包含列表,编辑,查看等用户界面,并能够进行持久化存储,非信息系统很少包括列表,编辑,查看等用户界面。针对上述通用功能需求,目前有很多产品框架提供了解决方案。在J2EE体系内,前端会通常会使用模版化的思路,如Struts框架,后端会使用OR映射框架,如Hibernate,对以上代码复用设计,都是基于泛型或向上转型实现。如果在标准产品进行客户化定制或项目需求变更过程中遇到需要扩展派生业务实体对象的情况,我们随之也需要在代码层面进行实体的定义,还需要在功能模块添加部分雷同代码,浪费了资源,同时也降低了开发出的软甲产品的灵活性。
因此,如何提高软件产品在开发过程中代码的复用性,以及提升开发出的软件产品的灵活性产品本身的灵活性成为亟待解决的问题。
发明内容
本发明正是基于上述问题,提出了一种新的技术方案,不仅可以提高软件产品在开发过程中代码的复用性,而且可以提升开发出的软件产品的灵活性产品本身的灵活性。
有鉴于此,本发明的一方面提出了一种数据处理方法,包括:定义系统的抽象数据实体对象、派生业务实体对象、所述派生业务实体对象的业务类型描述和多个业务属性的业务属性描述;在所述系统的运行时刻,判断所述系统的业务需求是否发生变动;在判断结果为是时,修改所述派生业务实体对象的业务类型描述和业务属性描述。
在该技术方案中,由于对派生业务实体对象操作时,其业务类型的特性是隐藏的,而派生业务实体对象的业务类型描述和业务属性描述在系统运行时才能够体现具体的特征,通过上述技术方案,在系统开发过程中,只需要使用一套针对抽象数据实体对象的代码进行适配即可,能够显著降低了系统在开发时代码的冗余程度,提高了代码的复用性及开发效率;而且系统开发完成后,若派生业务实体对象的需求发生变动,在系统的运行时刻对派生业务实体对象的业务类型描述和业务属性描述进行修改,实现了对派生业务实体对象的运行时刻业务扩展,避免了相关技术进行业务扩展中对代码层面的变动和编译,从而在软件产品的开发过程中有效地提高了代码复用性,进而大大增加了开发出的产品本身的灵活性,降低了产品交付及后续需求变更维护带来的工作量。
在上述技术方案中,优选地,所述抽象数据实体对象包括通用数据集合,所述通用数据集合用于存放所述多个业务属性,所述多个业务属性中的每个业务属性具有业务属性描述和业务数据值;所述派生业务实体对象包括:业务类型描述对象、业务属性描述对象。
在该技术方案中,抽象数据实体对象的通用数据集合用于存放派生业务实体对象的多个业务属性,每个业务属性具有业务属性描述和业务数据值,从而使通用数据集合能够承载不同类型的业务属性描述和业务数据值,其中,业务数据值可以为字符、整形、浮点等语言型别,为了能够使业务数据值兼容不同语言型别,需要封装抽象,如果使用Java语言可直接用Object基数据类型。
另外,业务类型描述对象并非是定义的业务类型描述,业务类型描述对象是一个空的能够装载描述信息的结构,不包含数据。同理,业务属性描述对象并非是定义的业务属性描述,业务属性描述对象指的是一个空的能够装载描述信息的结构,不包含数据。
在上述任一技术方案中,优选地,所述定义系统的抽象数据实体对象、派生业务实体对象、所述派生业务实体对象的业务类型描述和多个业务属性的业务属性描述的步骤之后,包括:根据已知的当前业务属性描述中的属性名称,在所述多个业务属性中获取目标业务属性,并根据所述目标业务属性获取对应的业务属性描述和业务数据值。
在该技术方案中,根据已知的当前业务属性描述中的属性名称,在多个业务属性中获取对应的目标业务属性,从而获取其业务属性描述和业务数据值,进而实现派生业务实体对象业务数据的存取封装,避免了相关技术中的完全牺牲代码柔性为代价来达到派生业务实体对象的扩展,而本申请则不受约束,其本质上就是将属性名称作为Key,从抽象数据实体对象内的通用数据集合(Map)中取得相应的业务属性。
在上述任一技术方案中,优选地,所述定义系统的抽象数据实体对象、派生业务实体对象、所述派生业务实体对象的业务类型描述和多个业务属性的业务属性描述的步骤之后,包括:在所述系统的运行时刻,将所述派生业务实体对象的业务类型描述赋值到所述业务类型描述对象中,将所述派生业务实体对象的业务属性描述赋值到所述业务属性描述对象中;将赋值后的所述业务类型描述对象和所述业务属性描述对象注入到所述抽象数据实体对象中。
在该技术方案中,抽象数据实体对象、业务类型描述对象和业务属性描述对象在定义时均是空的,不具有任何业务意义,通过将业务类型描述的数据赋值到业务类型描述对象中,将赋值后的业务类型描述对象注入到抽象数据实体对象中,以及将业务属性描述的数据赋值到业务属性描述对象中,将赋值后的业务属性描述对象注入到抽象数据实体对象中,从而完成系统整个业务实体对象的派生。
另外,将赋值后的业务属性描述对象注入到抽象数据实体对象中的步骤,具体包括:将赋值后的业务属性描述对象注入到业务属性中,将业务属性注入到抽象数据实体对象的通用数据集合中。
在上述任一技术方案中,优选地,所述派生业务实体对象的业务类型描述和业务属性描述存储在配置文件中或数据库中;修改所述派生业务实体对象的业务类型描述和业务属性描述的步骤,具体包括:修改所述配置文件或所述数据库中的所述派生业务实体对象的业务类型描述和业务属性描述。
在该技术方案中,通过对配置文件或者数据库中的派生业务实体对象的业务类型描述和业务属性描述进行修改,以实现系统在运行时的扩展。还可以结合缓存加速的方式,避免了相关技术中的对代码层面的变动,从而有效地提高了代码开发效率。
本发明的另一方面提出了一种数据处理装置,包括:定义单元,用于定义系统的抽象数据实体对象、派生业务实体对象、所述派生业务实体对象的业务类型描述和多个业务属性的业务属性描述;判断单元,用于在所述系统的运行时刻,判断所述系统的业务需求是否发生变动;处理单元,用于在判断结果为是时,修改所述派生业务实体对象的业务类型描述和业务属性描述。
在该技术方案中,由于对派生业务实体对象操作时,其业务类型的特性是隐藏的,而派生业务实体对象的业务类型描述和业务属性描述在系统运行时才能够体现具体的特征,通过上述技术方案,在系统开发过程中,只需要使用一套针对抽象数据实体对象的代码进行适配即可,能够显著降低了系统在开发时代码的冗余程度,提高了代码的复用性及开发效率;而且系统开发完成后,若派生业务实体对象的需求发生变动,在系统的运行时刻对派生业务实体对象的业务类型描述和业务属性描述进行修改,实现了对派生业务实体对象的运行时刻业务扩展,避免了相关技术进行业务扩展中对代码层面的变动和编译,从而在软件产品的开发过程中有效地提高了代码复用性,进而大大增加了开发出的产品本身的灵活性,降低了产品交付及后续需求变更维护带来的工作量。
在上述任一技术方案中,优选地,所述抽象数据实体对象包括通用数据集合,所述通用数据集合用于存放所述多个业务属性,所述多个业务属性中的每个业务属性具有业务属性描述和业务数据值;所述派生业务实体对象包括:业务类型描述对象、业务属性描述对象。
在该技术方案中,抽象数据实体对象的通用数据集合用于存放派生业务实体对象的多个业务属性,每个业务属性具有业务属性描述和业务数据值,从而使通用数据集合能够承载不同类型的业务属性描述和业务数据值,其中,业务数据值可以为字符、整形、浮点等语言型别,为了能够使业务数据值兼容不同语言型别,需要封装抽象,如果使用Java语言可直接用Object基数据类型。
另外,业务类型描述对象并非是定义的业务类型描述,业务类型描述对象指的是一个空的能够装载描述信息的结构,不包含数据。同理,业务属性描述对象并非是定义的业务属性描述,业务属性描述对象指的是一个空的能够装载描述信息的结构,不包含数据。
在上述任一技术方案中,优选地,还包括:获取单元,根据已知的当前业务属性描述中的属性名称,在所述多个业务属性中获取目标业务属性,并根据所述目标业务属性获取对应的业务属性描述和业务数据值。
在该技术方案中,根据已知的当前业务属性描述中的属性名称,在多个业务属性中获取对应的目标业务属性,从而获取其业务属性描述和业务数据值,进而实现派生业务实体对象业务数据的存取封装,避免了相关技术中的完全牺牲代码柔性为代价来达到派生业务实体对象的扩展,而本申请则不受约束,其本质上就是将属性名称作为Key,从抽象数据实体对象内的通用数据集合(Map)中取得相应的业务属性。
在上述任一技术方案中,优选地,所述处理单元还用于,在所述系统的运行时刻,将所述派生业务实体对象的业务类型描述赋值到所述业务类型描述对象中,将所述派生业务实体对象的业务属性描述赋值到所述业务属性描述对象中,将赋值后的所述业务类型描述对象和所述业务属性描述对象注入到所述抽象数据实体对象中。
在该技术方案中,抽象数据实体对象、业务类型描述对象和业务属性描述对象在定义时均是空的,不具有任何业务意义,通过将业务类型描述的数据赋值到业务类型描述对象中,将赋值后的业务类型描述对象注入到抽象数据实体对象中,以及将业务属性描述的数据赋值到业务属性描述对象中,将赋值后的业务属性描述对象注入到抽象数据实体对象中,从而完成系统整个业务实体对象的派生。
另外,将赋值后的业务属性描述对象注入到抽象数据实体对象中的步骤,具体包括:将赋值后的业务属性描述对象注入到业务属性中,将业务属性注入到抽象数据实体对象的通用数据集合中。
在上述任一技术方案中,优选地,所述派生业务实体对象的业务类型描述和业务属性描述存储在配置文件中或数据库中,所述处理单元具体用于,修改所述配置文件或所述数据库中的所述派生业务实体对象的业务类型描述和业务属性描述。
在该技术方案中,通过对配置文件或者数据库中的派生业务实体对象的业务类型描述和业务属性描述进行修改,以实现系统在运行时的扩展。还可以结合缓存加速的方式,避免了相关技术中的对代码层面的变动,从而有效地提高了代码开发效率。
通过本发明的技术方案,不仅可以提高软件产品在开发过程中代码的复用性,而且可以提升开发出的软件产品的灵活性产品本身的灵活性。
附图说明
图1示出了相关技术中的数据存取模块的原理示意图;
图2示出了根据本发明的一个实施例的数据处理方法的流程示意图;
图3示出了根据本发明的一个实施例的数据处理装置的结构示意图;
图4示出了根据本发明的一个实施例的定义派生业务实体对象的代码示意图;
图5示出了根据本发明的一个实施例的数据处理装置的原理示意图;
图6示出了根据本发明的一个实施例的定义通用数据集合的代码示意图;
图7示出了根据本发明的一个实施例的修改派生业务实体对象的原理示意图;
图8示出了根据本发明的一个实施例的应用数据处理装置的原理示意图。
具体实施方式
为了可以更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。
图2示出了根据本发明的一个实施例的数据处理方法的流程示意图。
如图2所示,根据本发明的一个实施例的数据处理方法,包括:
步骤202,定义系统的抽象数据实体对象、派生业务实体对象、所述派生业务实体对象的业务类型描述和多个业务属性的业务属性描述;
步骤204,在所述系统的运行时刻,判断所述系统的业务需求是否发生变动,在判断结果为是时,进入步骤206,否则,进入步骤204;
步骤206,修改所述派生业务实体对象的业务类型描述和业务属性描述。
在该技术方案中,由于对派生业务实体对象操作时,其业务类型的特性是隐藏的,而派生业务实体对象的业务类型描述和业务属性描述在系统运行时才能够体现具体的特征,通过上述技术方案,在系统开发过程中,只需要使用一套针对抽象数据实体对象的代码进行适配即可,能够显著降低了系统在开发时代码的冗余程度,提高了代码的复用性及开发效率;而且系统开发完成后,若派生业务实体对象的需求发生变动,在系统的运行时刻对派生业务实体对象的业务类型描述和业务属性描述进行修改,实现了对派生业务实体对象的运行时刻业务扩展,避免了相关技术进行业务扩展中对代码层面的变动和编译,从而在软件产品的开发过程中有效地提高了代码复用性,进而大大增加了开发出的产品本身的灵活性,降低了产品交付及后续需求变更维护带来的工作量。
在上述技术方案中,优选地,所述抽象数据实体对象包括通用数据集合,所述通用数据集合用于存放所述多个业务属性,所述多个业务属性中的每个业务属性具有业务属性描述和业务数据值;所述派生业务实体对象包括:业务类型描述对象、业务属性描述对象。
在该技术方案中,抽象数据实体对象的通用数据集合用于存放派生业务实体对象的多个业务属性,每个业务属性具有业务属性描述和业务数据值,从而使通用数据集合能够承载不同类型的业务属性描述和业务数据值,其中,业务数据值可以为字符、整形、浮点等语言型别,为了能够使业务数据值兼容不同语言型别,需要封装抽象,如果使用Java语言可直接用Object基数据类型。
另外,业务类型描述对象并非是定义的业务类型描述,业务类型描述对象是一个空的能够装载描述信息的结构,不包含数据。同理,业务属性描述对象并非是定义的业务属性描述,业务属性描述对象指的是一个空的能够装载描述信息的结构,不包含数据。
在上述任一技术方案中,优选地,步骤202之后,包括:根据已知的当前业务属性描述中的属性名称,在所述多个业务属性中获取目标业务属性,并根据所述目标业务属性获取对应的业务属性描述和业务数据值。
在该技术方案中,根据已知的当前业务属性描述中的属性名称,在多个业务属性中获取对应的目标业务属性,从而获取其业务属性描述和业务数据值,进而实现派生业务实体对象业务数据的存取封装,避免了相关技术中的完全牺牲代码柔性为代价来达到派生业务实体对象的扩展,而本申请则不受约束,其本质上就是将属性名称作为Key,从抽象数据实体对象内的通用数据集合(Map)中取得相应的业务属性。
在上述任一技术方案中,优选地,步骤202之后包括:在所述系统的运行时刻,将所述派生业务实体对象的业务类型描述赋值到所述业务类型描述对象中,将所述派生业务实体对象的业务属性描述赋值到所述业务属性描述对象中;将赋值后的所述业务类型描述对象和所述业务属性描述对象注入到所述抽象数据实体对象中。
在该技术方案中,抽象数据实体对象、业务类型描述对象和业务属性描述对象在定义时均是空的,不具有任何业务意义,通过将业务类型描述的数据赋值到业务类型描述对象中,将赋值后的业务类型描述对象注入到抽象数据实体对象中,以及将业务属性描述的数据赋值到业务属性描述对象中,将赋值后的业务属性描述对象注入到抽象数据实体对象中,从而完成系统整个业务实体对象的派生。
另外,将赋值后的业务属性描述对象注入到抽象数据实体对象中的步骤,具体包括:将赋值后的业务属性描述对象注入到业务属性中,将业务属性注入到抽象数据实体对象的通用数据集合中。
在上述任一技术方案中,优选地,所述派生业务实体对象的业务类型描述和业务属性描述存储在配置文件中或数据库中;步骤206具体包括:修改所述配置文件或所述数据库中的所述派生业务实体对象的业务类型描述和业务属性描述。
在该技术方案中,通过对配置文件或者数据库中的派生业务实体对象的业务类型描述和业务属性描述进行修改,以实现系统在运行时的扩展。还可以结合缓存加速的方式,避免了相关技术中的对代码层面的变动,从而有效地提高了代码开发效率。
图3示出了根据本发明的一个实施例的数据处理装置的结构示意图。
如图3所示,根据本发明的一个实施例的数据处理装置300,包括:定义单元302,用于定义系统的抽象数据实体对象、派生业务实体对象、所述派生业务实体对象的业务类型描述和多个业务属性的业务属性描述;判断单元304,用于在所述系统的运行时刻,判断所述系统的业务需求是否发生变动;处理单元306,用于在判断结果为是时,修改所述派生业务实体对象的业务类型描述和业务属性描述。
在该技术方案中,由于对派生业务实体对象操作时,其业务类型的特性是隐藏的,而派生业务实体对象的业务类型描述和业务属性描述在系统运行时才能够体现具体的特征,通过上述技术方案,在系统开发过程中,只需要使用一套针对抽象数据实体对象的代码进行适配即可,能够显著降低了系统在开发时代码的冗余程度,提高了代码的复用性及开发效率;而且系统开发完成后,若派生业务实体对象的需求发生变动,在系统的运行时刻对派生业务实体对象的业务类型描述和业务属性描述进行修改,实现了对派生业务实体对象的运行时刻业务扩展,避免了相关技术进行业务扩展中对代码层面的变动和编译,从而在软件产品的开发过程中有效地提高了代码复用性,进而大大增加了开发出的产品本身的灵活性,降低了产品交付及后续需求变更维护带来的工作量。
在上述任一技术方案中,优选地,所述抽象数据实体对象包括通用数据集合,所述通用数据集合用于存放所述多个业务属性,所述多个业务属性中的每个业务属性具有业务属性描述和业务数据值;所述派生业务实体对象包括:业务类型描述对象、业务属性描述对象。
在该技术方案中,抽象数据实体对象的通用数据集合用于存放派生业务实体对象的多个业务属性,每个业务属性具有业务属性描述和业务数据值,从而使通用数据集合能够承载不同类型的业务属性描述和业务数据值,其中,业务数据值可以为字符、整形、浮点等语言型别,为了能够使业务数据值兼容不同语言型别,需要封装抽象,如果使用Java语言可直接用Object基数据类型。
另外,业务类型描述对象并非是定义的业务类型描述,业务类型描述对象指的是一个空的能够装载描述信息的结构,不包含数据。同理,业务属性描述对象并非是定义的业务属性描述,业务属性描述对象指的是一个空的能够装载描述信息的结构,不包含数据。
在上述任一技术方案中,优选地,还包括:获取单元308,根据已知的当前业务属性描述中的属性名称,在所述多个业务属性中获取目标业务属性,并根据所述目标业务属性获取对应的业务属性描述和业务数据值。
在该技术方案中,根据已知的当前业务属性描述中的属性名称,在多个业务属性中获取对应的目标业务属性,从而获取其业务属性描述和业务数据值,进而实现派生业务实体对象业务数据的存取封装,避免了相关技术中的完全牺牲代码柔性为代价来达到派生业务实体对象的扩展,而本申请则不受约束,其本质上就是将属性名称作为Key,从抽象数据实体对象内的通用数据集合(Map)中取得相应的业务属性。
在上述任一技术方案中,优选地,所述处理单元306还用于,在所述系统的运行时刻,将所述派生业务实体对象的业务类型描述赋值到所述业务类型描述对象中,将所述派生业务实体对象的业务属性描述赋值到所述业务属性描述对象中,将赋值后的所述业务类型描述对象和所述业务属性描述对象注入到所述抽象数据实体对象中。
在该技术方案中,抽象数据实体对象、业务类型描述对象和业务属性描述对象在定义时均是空的,不具有任何业务意义,通过将业务类型描述的数据赋值到业务类型描述对象中,将赋值后的业务类型描述对象注入到抽象数据实体对象中,以及将业务属性描述的数据赋值到业务属性描述对象中,将赋值后的业务属性描述对象注入到抽象数据实体对象中,从而完成系统整个业务实体对象的派生。
另外,将赋值后的业务属性描述对象注入到抽象数据实体对象中的步骤,具体包括:将赋值后的业务属性描述对象注入到业务属性中,将业务属性注入到抽象数据实体对象的通用数据集合中。
在上述任一技术方案中,优选地,所述派生业务实体对象的业务类型描述和业务属性描述存储在配置文件中或数据库中,所述处理单元306具体用于,修改所述配置文件或所述数据库中的所述派生业务实体对象的业务类型描述和业务属性描述。
在该技术方案中,通过对配置文件或者数据库中的派生业务实体对象的业务类型描述和业务属性描述进行修改,以实现系统在运行时的扩展。还可以结合缓存加速的方式,避免了相关技术中的对代码层面的变动,从而有效地提高了代码开发效率。
图4示出了根据本发明的一个实施例的定义派生业务实体对象的代码示意图;图5示出了根据本发明的一个实施例的数据处理装置的原理示意图;图6示出了根据本发明的一个实施例的定义通用数据集合的代码示意图;图7示出了根据本发明的一个实施例的修改派生业务实体对象的原理示意图。
下面结合图4至图7详细说明本发明的技术方案:
派生业务实体对象在处理持久化存取和界面展现时能够共用同一套代码或模版(此处的共用代码并非在一套代码中进行型别判定分支处理),并且后续新增或修改了业务属性,原有代码能够完全适配,不会对代码进行侵入性增改,因此它不同于语言泛型,也不同于对象继承。
另外,派生业务实体对象的业务类型的特性便需要在运行时才会展现,而且开发人员在代码编写过程中的业务类型也是未知的,即对不同派生业务实体对象(如:用户,订单,客户等)进行界面展现或者存取的时候,面向的是同一个抽象对象Entity,仅抽象对象的类型是确定的,在一定程度上可以理解为具备运行时扩展性的泛型、继承综合体。
正如上述中所提到的派生业务实体对象在操作时其业务类型的特性是隐藏的,因此,使用派生业务实体对象时可以作为任意的业务对象,如“用户”,“订单”等,其内部业务属性不会有特定的业务区分,不同于传统实体类。如图4所示(以Java语言作为范例),如果要携带业务类型的特性必须通过继承(extends)等方式在代码中显式定义,业务类型的特性会在派生业务实体对象运行时直接注入,否则就会破坏开发出的系统在运行时的扩展性和属性的get/set一致性。
派生业务实体对象的业务类型的特性在运行时才会体现,类似于使用语言层面的父对象引用。两者不同点在于,语言层面的父对象引用如果要获取派生业务实体对象的业务类型的特性需要向下转型,才能使用派生业务实体对象定义的get/set方法操作。而在派生业务实体对象注入业务类型的特性后,派生业务实体对象可以直接使用。并且派生业务实体对象的业务属性与业务类型的特性在运行时是能够扩展的,能够随需添加或改动。
如图5所示,基于以上原则,围绕“动态描述注入”这个核心理念展开,业务属性描述(Description)是在系统运行时注入到业务属性(Attribute)中,具体地,先将业务属性描述赋值到业务属性描述对象中,将业务属性描述对象注入到业务属性中,还可以对业务数据值进行赋值。然后,在运行时将业务属性注入到抽象数据实体对象(Entity)的Map类型的通用数据集合中,则该通用数据集合也就成为了业务属性集合。另外,在系统运行时将业务类型描述注入到抽象数据实体对象中,具体地,先将业务类型描述赋值到业务类型描述对象中,然后将业务类型描述对象注入到抽象数据实体对象中。上述技术方案完成了整个业务实体对象的派生,即注入后的抽象数据实体对象即为派生后的派生业务实体对象(User Entity)。
1)定义抽象数据实体对象、派生业务数据对象、派生业务实体对象的描述
定义抽象数据实体对象,抽象数据实体对象仅包含一个Map类型的通用数据集合,在未注入具体的业务类型描述之前不具备任何业务意义。
定义空的派生业务数据对象,派生业务数据对象包括:业务类型描述对象和业务属性描述对象,这两者均仅为定义,不包含数据,而且定义的业务属性仅为定义,不包含数据,能够存放具体的业务数据值和业务属性描述。
派生业务实体对象在实现层面表现为具体的可实例化类,非抽象类定义,其内部包含两部分:业务类型描述(Entity Description),业务属性描述。这里,业务类型描述和业务属性描述指具体的描述数据,可以存放在配置文件或者数据库中。
定义业务类型描述,将业务类型描述注入到运行时的派生业务实体对象中,用于标识抽象实体对象的业务类型,根据上层实际应用需要,定义具体的参数,如表1所示,可随需扩展。
表1
参数名称 | 参数描述 | 参数举例 |
EntityName | 类型名称 | User |
EntityLabel | 类型显示标签 | 用户 |
EntityPersistenceTable | 关系型数据库存储表 | tb_user |
…… |
业务类型的特性一般是通过业务属性体现,而每一个业务属性在未注入描述之前也为抽象属性,能够承载不同型别,不同意义的业务数据。它由两部分元素:业务数据值和业务属性描述构成。
业务数据值:为了兼容不同语言型别,如(字符,整形,浮点等),存储业务数据值,需要封装抽象,如果使用Java语言可直接用Object基数据类型。
业务属性描述:与业务类型描述定义类似,在运行时注入赋予业务属性相应的业务类型的特征,内容包括持久化,界面展示等,同样能够根据上层实际应用需要,定义具体的参数,基本描述参数举例如表2所示。
表2
通用数据集合的定义:
为了将所有的业务属性装入实体,且方便存取,使用Map数据类型作为容器,key为属性名称,Value为属性实体,以上采用Java语言实现范例如图6所示。
2)运行时刻派生业务实体对象的业务扩展,包括如下:
实体定义的变动:
本方案将相关技术中业务扩展所带来的代码层面变动便转化为派生业务实体对象定义、描述的变动。将具体的派生业务实体对象的描述存储在配置文件中或数据库中,如图7所示,通过运行时刻对配置文件或数据库的修改,并结合缓存加速,从而实现对派生业务实体对象的描述进行修改。
业务属性的变动:
业务属性也是在运行时刻注入的,业务属性的增减体现在派生业务实体对象的业务属性的添加与移除,业务属性描述的修改与派生业务实体对象的描述的修改相同,均是在派生业务实体对象运行时刻对配置文件或数据库的修改。
如果上述特性封装成用户界面操作功能向用户开放,将大大提高产品的扩展性,节约后续维护开发成本。
3)数据对象的存取封装
基于以上派生业务实体对象的定义方式,内部业务属性数据的存取与相关技术中的语言层面实体对象属性的存取会有所不同。以Java语言为例,
相关技术中的对业务属性的存取:
Java:
entity.setLoginName("User");
String LoginName=entity.get LoginName();
本方案中的对业务属性的存取:
Java:
entity.setAttribute("User.LoginName","user");
String LoginName=entity.getAttribute("User.LoginName").toString();
相关技术中的派生业务实体对象在语言定义层面具备型别特征,派生业务实体对象进行数据存取时以完全牺牲代码柔性为代价,不可扩展。而在本方案中,根据派生业务实体对象的定义,将属性名称以参数的形式传入获取,其本质上是将属性名称作为Key,从通用数据集合(Map)中取得相应的属性元素(即目标业务属性),因此,本方案具有很好的扩展性。
在上述技术方案中,将超泛型对象技术应用于软件产品开发过程中,在提升模块的复用性的同时,大大增加了产品的本身的灵活性,降低了产品交付及后续需求变更维护带来的工作量。尤其对于SaaS(Software-as-a-Service)模式的公有云平台产品,使其具备了更强的运行时定制化功能,从业务对象扩展、业务属性变动到用户交互界面定制,都能够依托本技术在运行时配置。其中,超泛型对象技术指的是能够高度抽象派生业务实体对象,开发人员不需要关心派生业务实体对象的型别特性,也不用在编码中对业务类型进行区分,使用一套代码即完成所有派生业务实体对象的功能适配,后续对象的扩展修改,都不需要在代码层面进行定义、增加或改动。
另外,对于软件产品开发人员,产品中所涉及的所有标准对象均可使用统一的前端展现,后端持久化等相关代码逻辑,因为高度的抽象性,可实践性,相对于传统开发模式代码工作量减少了一倍以上,节约了开发周期和成本。
图8示出了根据本发明的一个实施例的应用数据处理装置的原理示意图。
系统内标准业务对象,从前端用户交互到后端持久化存储,采用统一处理逻辑,由派生业务实体对象注入的业务类型描述(EntityDesc)驱动。
系统启动时,实体定义载入逻辑(DescLoader)从数据库中载入实体对象配置,放入缓存。
根据接收到的用户发出的指令,新增或编辑派生业务实体对象,进入相关界面后,对象编辑界面(EditLayout)根据传入实体类型参数,调用用户界面配置载入逻辑(LayoutLoader)从数据库中载入用户布局配置。
对象编辑界面(EditLayout)解析载入的用户布局配置,依托派生业务实体对象中业务属性的描述在前端展现参数以供用户进行绘制。
若用户完成绘制,保存绘制的信息,对象编辑界面(EditLayout)根据业务属性定义参数组装抽象业务对象Entity并交由标准对象持久化模块(CommonSaver)进行处理,标准对象持久化模块(CommonSaver)将处理后的存储在数据库中。
以上结合附图详细说明了本发明的技术方案,可以提高软件产品在开发过程中代码的复用性,从而大大增加了开发出的产品本身的灵活性。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种数据处理方法,其特征在于,包括:
定义系统的抽象数据实体对象、派生业务实体对象、所述派生业务实体对象的业务类型描述和多个业务属性的业务属性描述;
在所述系统的运行时刻,判断所述系统的业务需求是否发生变动;
在判断结果为是时,修改所述派生业务实体对象的业务类型描述和业务属性描述。
2.根据权利要求1所述的数据处理方法,其特征在于,所述抽象数据实体对象包括通用数据集合,所述通用数据集合用于存放所述多个业务属性,所述多个业务属性中的每个业务属性具有业务属性描述和业务数据值;所述派生业务实体对象包括:业务类型描述对象、业务属性描述对象。
3.根据权利要求2所述的数据处理方法,其特征在于,所述定义系统的抽象数据实体对象、派生业务实体对象、所述派生业务实体对象的业务类型描述和多个业务属性的业务属性描述的步骤之后,包括:
根据已知的当前业务属性描述中的属性名称,在所述多个业务属性中获取目标业务属性,并根据所述目标业务属性获取对应的业务属性描述和业务数据值。
4.根据权利要求2所述的数据处理方法,其特征在于,所述定义系统的抽象数据实体对象、派生业务实体对象、所述派生业务实体对象的业务类型描述和多个业务属性的业务属性描述的步骤之后,包括:
在所述系统的运行时刻,将所述派生业务实体对象的业务类型描述赋值到所述业务类型描述对象中,将所述派生业务实体对象的业务属性描述赋值到所述业务属性描述对象中;
将赋值后的所述业务类型描述对象和所述业务属性描述对象注入到所述抽象数据实体对象中。
5.根据权利要求1至4中任一项所述的数据处理方法,其特征在于,所述派生业务实体对象的业务类型描述和业务属性描述存储在配置文件中或数据库中;修改所述派生业务实体对象的业务类型描述和业务属性描述的步骤,具体包括:
修改所述配置文件或所述数据库中的所述派生业务实体对象的业务类型描述和业务属性描述。
6.一种数据处理装置,其特征在于,包括:
定义单元,用于定义系统的抽象数据实体对象、派生业务实体对象、所述派生业务实体对象的业务类型描述和多个业务属性的业务属性描述;
判断单元,用于在所述系统的运行时刻,判断所述系统的业务需求是否发生变动;
处理单元,用于在判断结果为是时,修改所述派生业务实体对象的业务类型描述和业务属性描述。
7.根据权利要求6所述的数据处理装置,其特征在于,所述抽象数据实体对象包括通用数据集合,所述通用数据集合用于存放所述多个业务属性,所述多个业务属性中的每个业务属性具有业务属性描述和业务数据值;所述派生业务实体对象包括:业务类型描述对象、业务属性描述对象。
8.根据权利要求7所述的数据处理装置,其特征在于,还包括:
获取单元,根据已知的当前业务属性描述中的属性名称,在所述多个业务属性中获取目标业务属性,并根据所述目标业务属性获取对应的业务属性描述和业务数据值。
9.根据权利要求7所述的数据处理装置,其特征在于,所述处理单元还用于,
在所述系统的运行时刻,将所述派生业务实体对象的业务类型描述赋值到所述业务类型描述对象中,将所述派生业务实体对象的业务属性描述赋值到所述业务属性描述对象中,
将赋值后的所述业务类型描述对象和所述业务属性描述对象注入到所述抽象数据实体对象中。
10.根据权利要求6至9中任一项所述的数据处理装置,其特征在于,所述派生业务实体对象的业务类型描述和业务属性描述存储在配置文件中或数据库中,所述处理单元具体用于,
修改所述配置文件或所述数据库中的所述派生业务实体对象的业务类型描述和业务属性描述。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510962570.3A CN105630489B (zh) | 2015-12-21 | 2015-12-21 | 数据处理方法和数据处理装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510962570.3A CN105630489B (zh) | 2015-12-21 | 2015-12-21 | 数据处理方法和数据处理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105630489A CN105630489A (zh) | 2016-06-01 |
CN105630489B true CN105630489B (zh) | 2019-02-26 |
Family
ID=56045479
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510962570.3A Active CN105630489B (zh) | 2015-12-21 | 2015-12-21 | 数据处理方法和数据处理装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105630489B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106951254B (zh) * | 2017-03-22 | 2020-07-10 | 中国人民银行清算总中心 | 支付系统中相似业务功能模块复用的方法及装置 |
CN109615494A (zh) * | 2018-09-29 | 2019-04-12 | 阿里巴巴集团控股有限公司 | 业务派生方法、装置、电子设备及计算机可读存储介质 |
CN110489109A (zh) * | 2019-08-13 | 2019-11-22 | 上海乂学教育科技有限公司 | 代码复用的方法及装置 |
CN113837584B (zh) * | 2021-09-17 | 2024-04-12 | 平安养老保险股份有限公司 | 业务处理系统和基于业务处理系统的异常数据处理方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102270138A (zh) * | 2011-08-15 | 2011-12-07 | 青岛海信传媒网络技术有限公司 | 实体对象的创建方法和实体对象创建装置 |
CN103729732A (zh) * | 2013-12-18 | 2014-04-16 | 国家电网公司 | 一种分布式能源信息建模及信息交互方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030115309A1 (en) * | 2001-12-19 | 2003-06-19 | Mann Robert Alexander | Methods of invoking polymorphic operations in a statically typed language |
-
2015
- 2015-12-21 CN CN201510962570.3A patent/CN105630489B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102270138A (zh) * | 2011-08-15 | 2011-12-07 | 青岛海信传媒网络技术有限公司 | 实体对象的创建方法和实体对象创建装置 |
CN103729732A (zh) * | 2013-12-18 | 2014-04-16 | 国家电网公司 | 一种分布式能源信息建模及信息交互方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105630489A (zh) | 2016-06-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110825362B (zh) | 低代码应用软件开发系统及方法 | |
CN111666526B (zh) | 页面生成方法、装置、设备及存储介质 | |
Elrad et al. | Discussing aspects of AOP | |
CN107273117B (zh) | 一种编程友好型的敏捷代码自动生成系统 | |
CN105630489B (zh) | 数据处理方法和数据处理装置 | |
US8307015B2 (en) | Decorated model architecture for efficient model-driven application development | |
CN108509185B (zh) | 用于任意软件逻辑建模的系统和方法 | |
CN101777004B (zh) | 面向服务环境中基于模板实现bpel子流程复用的方法及系统 | |
CN104932905A (zh) | 一种aadl到c语言的代码自动生成方法 | |
US8826227B2 (en) | Computer aided visualization of a business object model lifecycle | |
CN106415488A (zh) | 将泛型类分解成层 | |
CN109298864A (zh) | 教育平台下的自动化生成项目骨架屏的方法及电子设备 | |
CN103294796A (zh) | 一种xml解析方法及医疗病案中自定义xml结构表单实现方法 | |
CN108170435A (zh) | 一种源代码转换方法、装置及设备 | |
CN107506190A (zh) | 基于Spring框架的XML文件修改方法及装置 | |
CN112463135A (zh) | 代码生成方法、代码生成器、电子设备及存储介质 | |
CN105630563A (zh) | 基于xml的继电保护装置规约的动态模型配置方法 | |
CN103631708A (zh) | 程序测试方法及程序测试装置 | |
CN112860584B (zh) | 基于工作流模型的测试方法及装置 | |
CN104462605B (zh) | 一种数据库持久层框架配置、修改方法及系统 | |
El-Khoury et al. | Supporting the linked data approach to maintain coherence across rich EMF models | |
CN103116622B (zh) | 一种用于Ibatis方案的序列值生成方法及装置 | |
Damiani et al. | Variability modules for java-like languages | |
Zhang et al. | GIScript: Towards an interoperable geospatial scripting language for GIS programming | |
CN106610922A (zh) | 反序列化方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |