CN102033743A - 一种应用插件扩充模型驱动开发能力的***及其方法 - Google Patents

一种应用插件扩充模型驱动开发能力的***及其方法 Download PDF

Info

Publication number
CN102033743A
CN102033743A CN2010102851024A CN201010285102A CN102033743A CN 102033743 A CN102033743 A CN 102033743A CN 2010102851024 A CN2010102851024 A CN 2010102851024A CN 201010285102 A CN201010285102 A CN 201010285102A CN 102033743 A CN102033743 A CN 102033743A
Authority
CN
China
Prior art keywords
plug
unit
class
definition information
model
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.)
Granted
Application number
CN2010102851024A
Other languages
English (en)
Other versions
CN102033743B (zh
Inventor
王四美
李长锋
张铁牛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangzhou wing Feng Communication Technology Co., Ltd.
Original Assignee
XI'AN SAIFEI SOFTWARE TECHNOLOGY Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by XI'AN SAIFEI SOFTWARE TECHNOLOGY Co Ltd filed Critical XI'AN SAIFEI SOFTWARE TECHNOLOGY Co Ltd
Priority to CN 201010285102 priority Critical patent/CN102033743B/zh
Publication of CN102033743A publication Critical patent/CN102033743A/zh
Application granted granted Critical
Publication of CN102033743B publication Critical patent/CN102033743B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

一种应用插件扩充模型驱动开发能力的***及其方法,该***和方法提出了“模型+插件”的组合方式来描述构建软件***,先用模型设计工具建立软件***的基本模型描述,再建立若干可复用的插件模型进一步描述基本模型对象,插件模型可以在各种基本模型对象上进行任意扩展,插件可以完成任意复杂度的软件功能,从而实现了对模型驱动开发能力的扩充。本发明解决了现有的模型驱动开发方法采用一套固定模型对复杂业务***描述能力不足以及无法在运行态可视的、动态的用模型驱动开发方法构建、扩充和维护软件***等技术问题,使用本发明方法开发***,具有开发复杂度低、开发速度快,技术复用程度高,开发的***具有扩展灵活、维护方便、可靠性高的优点。

Description

一种应用插件扩充模型驱动开发能力的***及其方法
技术领域
本发明涉及一种软件开发***及其方法,尤其涉及一种模型驱动开发的软件开发***及其方法,属于计算机软件领域。
背景技术
近20年来,软件开发技术和开发方法有了长足的进步。面向对象技术的应用使***分析更加贴进现实,使用UML建模技术使得大***、复杂***的开发更容易控制,各种灵活高效的开发语言及开发环境的出现使得开发速度进一步加快,但开发技术的前进速度还是跟不上客户越来越高、越来越复杂的需求。***变更频繁、软件文档管理跟不上软件变更、软件维护异常困难,使软件项目和产品的开发变得越来越难以控制,软件危机依就没有得到有效地解决。各行业都因使用软件产品而受益巨大,但软件企业一直为如何缩短项目交付期和满足客户需求而烦恼,同时也在寻找更加快捷的开发方法和开发工具,并向着软件生产工厂化的目标努力,但目前没有一种工具从本质上改变这一现状。
国际对象管理组织(OMG)2001年提出了模型驱动架构(MDA)的概念,这种概念提出的开发方法是一种基于代码生成的开发方式,先用平台及语言无关的通用建模语言(UML)描述模型,然后再生成对应平台的代码框架,接着维护此框架来适应客户具体需求,再编译为可执行的软件产品,最后发布产品供最终用户使用。后期对软件维护时再重复这个过程。这种方式自从OMG 2001年提出到现在已有不少建模工具中加入了代码生成的功能,但由于UML建模语言在描述能力上不能像开发语言那样灵活而强大,在实现上非常复杂,文档和代码同步困难,代码转换不彻底。框架和代码的自动生成是减轻了部分的代码编写工作,现在还没有哪个产品能实现全部的自动生成,UML生成的代码还不能够足以描述复杂***。因此目前没有一个工具能实现OMG提出目标。
模型驱动开发(MDD,Model driven development)是基于MDA理论的开发方法的统称,凡是以业务建模为前提的开发方法都可以称之为MDD。
由于OMG提出的模型驱动开发方法太过理论化和理想化,使得在***实现上极为困难,针对此种状况,还有部分企业及开发人员提出了另一种实现MDA架构的MDD方法,此方法的***一般包括:模型数据存储单元,模型设计工具,模型运行引擎,业务数据存储单元几部分,此方法的开发过程是使用模型设计工具设计业务的模型定义信息并存储到模型数据存储单元,使用模型运行引擎读取模型数据存储单元的模型定义信息并生成模型内存对象和软件界面,用户通过软件界面操作业务数据存储单元中的业务数据,完成软件功能,这种方法开发的软件***拥有模型驱动开发的所有特性:灵活、高效、维护容易,解决了MDA代码生成方法的复杂性。但是,此种方法也存在一个主要问题,因为软件的多样性和复杂性,一套固定的模型无法完全描述复杂的业务***。传统模型驱动开发要么就是解决问题能力有限,要么是半模型半代码的方法去构建***,所以没能力完全在运行态对***进行维护。
发明内容
为了解决现有的模型驱动开发方法采用一套固定模型对复杂业务***描述能力不足,以及现有的模型驱动开发方法无法在运行态可视的、动态的用模型驱动开发方法构建、扩充和维护业务***的技术问题,本发明提供了一种应用插件扩充模型驱动开发能力的***及其方法,该***和方法提出了“模型+插件”的组合方式来描述构建软件***,先用模型设计工具建立软件***的基本模型描述,再建立若干可复用的插件模型进一步描述基本模型对象,从而实现了对模型驱动开发能力的扩充。
本发明所采取的技术解决方案是:一种应用插件扩充模型驱动开发能力的***,包括模型数据存储单元、模型设计工具、业务数据存储单元、模型运行引擎,所述模型数据存储单元包括基本模型数据存储单元;所述模型数据存储单元是用于存储模型数据的数据库或文件;所述模型设计工具用于设计业务数据存储单元中的业务数据结构以及基本模型数据存储单元中的实体定义信息和界面定义信息;所述模型运行引擎用于定义业务元素类、字段类、业务表类、实体类和界面类,所述业务元素类、字段类、业务表类、实体类和界面类构成基本模型类,所述基本模型类用于在内存中构造对应的基本模型对象;其特殊之处是:所述模型运行引擎还包括插件支持程序集,所述插件支持程序集用于定义插件适配器类;所述模型数据存储单元还包括插件模型数据存储单元和插件应用数据存储单元;所述插件模型数据存储单元用于存储插件模型的数据,所述插件模型的数据包括程序集定义信息、程序类定义信息和插件定义信息,所述插件应用数据存储单元用于存储插件应用定义信息;所述基本模型类具有一个插件适配器类对象;所述插件适配器类对象可管理多个插件,所述插件是插件实现类运行后的内存表现形式;也叫插件实现类对象;所述***还包括插件运行库;所述插件运行库包括插件实现类程序集;所述插件实现类程序集包括至少一个插件实现类,每个插件实现类用于实现相应插件的接口规范和插件功能;所述基本模型类通过插件适配器类对象管理多个插件;所述模型设计工具还用于设计插件运行库及插件模型数据存储单元中的程序集定义信息、程序类定义信息、插件定义信息和插件应用数据存储单元中的插件应用定义信息。
上述基本模型数据存储单元用于存储基本模型的数据,所述基本模型的数据包括界面定义信息和实体定义信息,所述界面定义信息包括控件定义信息和菜单定义信息,所述实体定义信息包括业务表定义信息和业务功能定义信息,所述业务表定义信息包括字段定义信息,所述字段定义信息包括业务元素定义信息;所述业务数据存储单元是存储业务数据的数据库或文件;所述模型运行引擎可实现以下功能:
1]从基本模型数据存储单元中读取实体定义信息和界面定义信息;根据实体类生成实体类对象,根据界面类生成与实体类对象相应的界面类对象;所述界面类对象的屏幕表现就是操作界面;所述界面类对象表现的数据就是实体类对象的数据;
2]根据用户操作将业务数据存储单元中的业务数据读取至实体类对象中供用户通过操作界面查看;
3]根据用户操作将实体类对象的数据保存到业务数据存储单元中;
4]根据已生成的实体类对象和界面类对象读取插件应用定义信息中所对应的插件定义信息,并根据该插件定义信息调用所对应的插件实现类生成插件实现类对象,并使插件实现类对象和实体类对象及操作界面关联以控制实体类对象和界面类对象。
第二种应用插件扩充模型驱动开发能力的***包括模型数据存储单元、模型设计工具、业务数据存储单元、模型运行引擎,所述模型数据存储单元包括基本模型数据存储单元;所述模型设计工具用于设计业务数据存储单元中的业务数据结构以及基本模型数据存储单元中的实体定义信息和界面定义信息;所述模型运行引擎用于定义业务元素类、字段类、业务表类、实体类和界面类,所述业务元素类、字段类、业务表类、实体类和界面类构成基本模型类,所述基本模型类用于在内存中构造对应的基本模型对象;其特殊之处是:所述模型运行引擎还包括插件支持程序集,所述插件支持程序集用于定义插件接口、插件支持接口和插件适配器类;所述模型数据存储单元还包括插件模型数据存储单元和插件应用数据存储单元;所述插件模型数据存储单元用于存储插件模型的数据,所述插件模型的数据包括程序集定义信息、程序类定义信息和插件定义信息,所述插件应用数据存储单元用于存储插件应用定义信息;所述插件接口中定义有一个基本模型类对象;实现插件接口的插件实现类必须实现此基本模型类对象;此基本模型类对象记录了实现此接口的插件实现类所服务的基本模型类对象;所述基本模型类可实现插件支持接口;插件支持接口中具有一个插件适配器类对象;所述插件适配器类具有一个基本模型类对象,此基本模型类对象记录了此适配器类所属的基本模型对象;所述插件适配器类具有一个可管理多个插件的插件接口列表,所述插件是插件实现类运行后的内存表现形式;所述插件接口列表中可以记录对应的插件;所述***还包括插件运行库;所述插件运行库包括插件实现类程序集;所述插件实现类程序集包括至少一个插件实现类;
所述***还包括插件运行库;所述插件运行库包括插件实现类程序集和插件装载类程序集;所述插件实现类程序集包括至少一个插件实现类,每个插件实现类用于实现相应插件的接口规范和插件功能,所述插件装载类程序集包括至少一个插件装载类,插件装载类继承于插件适配器类,每个插件装载类可根据插件应用定义信息创建插件,并将创建的插件登记在插件接口列表中;所述基本模型类通过插件接口列表管理多个插件;所述模型设计工具还用于设计插件运行库及插件模型数据存储单元中的程序集定义信息、程序类定义信息、插件定义信息和插件应用数据存储单元中的插件应用定义信息。
上述基本模型数据存储单元用于存储基本模型的数据,所述基本模型的数据包括界面定义信息和实体定义信息,所述界面定义信息包括控件定义信息和菜单定义信息,所述实体定义信息包括业务表定义信息和业务功能定义信息,所述业务表定义信息包括字段定义信息,所述字段定义信息包括业务元素定义信息;所述业务数据存储单元是存储业务数据的数据库或文件;所述模型运行引擎可实现以下功能:
1]从基本模型数据存储单元中读取实体定义信息和界面定义信息;根据实体类生成实体类对象,根据界面类生成界面类对象;所述界面类对象的屏幕表现就是操作界面;所述界面类对象表现的数据就是实体类对象的数据;
2]根据用户操作将业务数据存储单元中的业务数据读取至实体类对象中供用户通过操作界面查看;
3]根据用户操作将实体类对象的数据保存到业务数据存储单元中;
4]根据已生成的实体类对象和界面类对象读取插件应用定义信息中所对应的插件定义信息,并根据该插件定义信息调用所对应的插件实现类生成插件实现类对象,并使插件实现类对象和实体对象及界面类对象关联以控制实体对象和界面对象。
一种应用插件扩充模型驱动开发能力的方法,包括以下步骤:
(1)根据需求分析,模型设计工具建立模型运行引擎据以运行的实体定义信息和界面定义信息并存储在基本模型数据存储单元中;
(2)模型设计工具根据所建立的相关信息定义相应的业务数据结构,并存储到业务数据存储单元中;
(3)根据需求分析,模型设计工具建立插件模型的数据,并存储在插件模型数据存储单元中;
(4)根据上述插件定义信息,模型设计工具编写相应的插件实现类代码,并编译生成插件实现类程序集;
(5)使用模型设计工具定义与基本模型对应的插件应用定义信息,并存储到插件应用数据存储单元中;
(6)使用模型运行引擎运行基本模型和插件模型。
上述步骤1的具体步骤如下:
1.1模型设计工具建立业务元素定义信息;
1.2模型设计工具引用业务元素定义信息建立业务表定义信息;
1.3模型设计工具引用业务表定义信息建立实体定义信息;
1.4模型设计工具引用实体定义信息建立界面定义信息;
1.5将上述信息存储到基本模型数据存储单元中;
所述步骤2的具体步骤如下:模型设计工具根据业务表定义信息定义业务数据结构,并生成业务数据存储单元中的业务数据结构;
步骤3的具体步骤如下:
3.1模型设计工具建立程序集定义信息;
3.2模型设计工具建立程序类定义信息,并指定其中的程序类所属的程序集;
3.3模型设计工具建立插件定义信息,并指定其中实现插件功能的程序类;
3.4将上述信息存储到插件模型数据存储单元中;
所述步骤4的具体步骤如下:
4.1根据插件定义信息,模型设计工具生成一个插件实现类代码框架;
4.2模型设计工具根据插件实现类代码框架编写插件实现类代码;
4.3模型设计工具根据插件实现类代码编译并生成插件实现类程序集;
步骤5的具体步骤如下:模型设计工具引用基本模型定义信息和插件模型定义信息,定义与基本模型对应的插件应用定义信息,并存储到插件应用数据存储单元中;
步骤6的具体步骤如下:
6.1创建基本模型对象及其子对象,模型运行引擎从基本模型数据存储单元中读取实体定义信息和界面定义信息,根据实体类生成实体类对象,根据界面类生成界面类对象;
6.2创建基本模型类对象的插件,根据已生成的基本模型类对象,读取插件应用数据存储单元中相应的插件应用定义信息,根据插件应用定义信息读取插件模型数据存储单元中的程序集定义信息和程序类定义信息,根据程序集定义信息中的程序集名称调用对应程序集中的程序类创建插件实现类对象;并将所创建的插件实现类对象记录在基本模型类对象的插件适配器类对象中;
6.3建立基本模型类对象和插件实现类对象的关联,将插件实现类对象记录在插件适配器类对象后,调用基本模型对象及其子对象的插件启用方法建立插件实现类相应方法与基本模型类对象及其子对象事件的关联,此插件启用方法中设置插件适配器类对象中的各插件实现类对象的激活属性,此激活属性会在激活时建立基本模型类对象及其子对象的事件与插件实现类对象中相应方法的关联,此激活属性会在禁用时断开基本模型类对象及其子对象的事件与插件实现类对象中相应方法的关联;
6.4运行过程中,插件实现类对象响应基本模型类对象及其子对象的事件并执行相应方法完成插件功能;
6.5基本模型类对象及其子对象在销毁前先断开其事件与插件实现类对象相应方法的联系,并销毁插件实现类对象;
6.6销毁基本模型类对象及其子对象;
第二种应用插件扩充模型驱动开发能力的方法,包括以下步骤:
(1)根据需求分析,模型设计工具建立模型运行引擎据以运行的实体定义信息和界面定义信息并存储在基本模型数据存储单元中;
(2)模型设计工具根据所建立的相关信息定义相应的业务数据结构,并存储到业务数据存储单元中;
(3)根据需求分析,模型设计工具建立插件模型的数据,并存储在插件模型数据存储单元中;
(4)根据上述插件定义信息,模型设计工具编写相应的插件实现类代码,并编译生成插件实现类程序集;
(5)使用模型设计工具定义与基本模型对应的插件应用定义信息,并存储到插件应用数据存储单元中,同时生成相应的插件装载类代码,并将其存储到程序类定义信息的程序类代码项中,并且把生成的插件装载类代码编译并合并到插件装载类程序集中;
(6)使用模型运行引擎运行基本模型和插件模型。
上述步骤1的具体步骤如下:
1.1模型设计工具建立业务元素定义信息;
1.2模型设计工具引用业务元素定义信息建立业务表定义信息;
1.3模型设计工具引用业务表定义信息建立实体定义信息;
1.4模型设计工具引用实体定义信息建立界面定义信息;
1.5将上述信息存储到基本模型数据存储单元中;
所述步骤2的具体步骤如下:模型设计工具根据业务表定义信息定义业务数据结构,并生成业务数据存储单元中的业务数据结构;
所述步骤3的具体步骤如下:
3.1模型设计工具建立程序集定义信息;
3.2模型设计工具建立程序类定义信息,并指定其中的程序类所属的程序集;
3.3模型设计工具建立插件定义信息,并指定其中实现插件功能的程序类;
3.4将上述信息存储到插件模型数据存储单元中;
所述步骤4的具体步骤如下:
4.1根据插件定义信息,模型设计工具生成一个插件实现类代码框架;
4.2模型设计工具根据插件实现类代码框架编写插件实现类代码;
4.3模型设计工具根据插件实现类代码编译并生成插件实现类程序集;
所述步骤5的具体步骤如下:模型设计工具引用基本模型定义信息和插件模型定义信息,定义与基本模型对应的插件应用定义信息,并存储到插件应用数据存储单元中,同时生成相应的插件装载类代码,并将其存储到程序类定义信息的程序类代码项中,且把生成的插件装载类代码编译并合并到插件装载类程序集中;
所述步骤6的具体步骤如下:
6.1创建基本模型类对象及其子对象,模型运行引擎从基本模型数据存储单元中读取实体定义信息和界面定义信息,根据实体类生成实体类对象,根据界面类生成界面类对象;
6.2创建基本模型类对象的插件,根据已生成的基本模型类对象,读取插件应用数据存储单元中相应的插件应用定义信息,根据插件应用定义信息读取插件模型数据存储单元中的程序集定义信息和程序类定义信息,根据程序集定义信息中的程序集名称调用插件装载类程序集中的插件装载类相应装载方法创建插件实现类对象;并将插件实现类对象记录到基本模型类对象的插件适配器类对象中的插件接口列表中;
6.3建立基本模型类对象和插件的关联,将插件登记在插件适配器类对象的插件接口列表后,调用基本模型类对象及其子对象的插件启用方法建立插件实现类对象相应方法与基本模型类对象及其子对象事件的关联,此插件启用方法中设置插件适配器类对象的插件接口列表中所记录的各插件实现类对象的激活属性,此激活属性会在激活时建立基本模型类对象及其子对象的事件与插件实现类对象中相应方法的关联,此激活属性会在禁用时断开基本模型类对象及其子对象的事件与插件实现类对象中相应方法的关联;
6.4运行中,插件实现类对象响应基本模型类对象及其子对象的事件并执行相应方法完成插件功能;
6.5基本模型类对象销毁前先断开其事件与插件实现类对象相应方法的联系,并销毁插件实现类对象;
6.6销毁基本模型类对象及其子对象。
本发明的优点:
1、***扩展灵活。本发明采用了“模型+插件”的组合方式来描述构建软件***,可实现实时跟踪和动态调整,无论是操作界面还是核心的业务功能,均可通过插件模型方便实现扩展并确保扩展能持续复用,并随着业务需求的改变而动态扩展***。本发明使用插件模型扩展基本模型定义,解决了基本模型对软件***描述能力不足的问题,使模型驱动开发方法也能设计出编码方法下的复杂业务功能。
2、***维护方便。本发明独特的插件模型使每个插件都独立存在,更新软件***就是替换插件,所以更新工作不会影响当前***的使用。本发明所构建的软件是基于基本模型和插件模型,模型透明、可读,对软件的维护就是对模型的维护,便于软件的维护和更新。
3、非编程开发,降低开发和调试中的技术要求。本发明采用“模型+插件”的组合方式,以完全图形化的方式实现软件开发、测试、跟踪、维护活动,开发人员无需掌握复杂的编程语言和框架,只需简单培训即可进行企业级专业软件开发。本发明提供大量的经过反复验证的插件模型,可大幅减少开发调试工作量,业务逻辑调试工作量远远低于传统开发模式调试工作量。本发明使用插件模型扩展业务模型定义,增加了模型功能的复用,减少代码编写量。
4、高可靠性。基于本发明开发的应用软件,构建于基本模型和经过反复验证的插件模型之上,很少甚至没有定制的编码,从而降低开发复杂度、减少出错可能性,能有效提高软件质量和可靠性。
5,减低复杂度。本发明依据对业务数据的高度概括和抽象,提供基本的业务模型和粒度大小适中的插件模型,具有细小粒度灵活方便的特征,可降低开发过程的复杂度。
6、可实现快速开发。本发明以模型为中心式的开发模式几乎屏蔽了所有的软件开发技术,可大幅度降低软件开发的技术要求,从而解决软件开发瓶颈;本发明特有的以模型构建的方式具有天生的工厂化生产特征,使得软件开发更便捷、有序,即使投入新人也可以立即带来开发效率的提升。本发明无需美工就能够自动生成风格统一的交互界面,且用户可以自定义应用界面布局。
7、降低成本,减少人力依赖。本发明特有的非编程开发模式,可有效降低对软件开发人员的技术要求,从而大量节省人力成本。本发明基于“模型+插件”的构建式开发,可实现快速开发,从而缩短开发周期。本发明“模型+插件”的构建式开发完全通过模型构建实现,所有业务处理、数据操作和逻辑过程都是透明可见且逻辑清晰的,不存在软件开发依赖于一两个核心技术人员的风险。本发明的低技术要求,可规避软件开发中的技术风险和人力风险,增加软件开发的可计划性,有效规避时间风险。
8、本发明可实现技术复用。本发明提出的模型继承方法解决了模型本身的复用能力,插件可复用,使业务模型和插件模型最大化利用率。本发明提出的模型包含关系使得在插件编写中更容易的访问和控制***运行。
附图说明
图1为本发明***的组成框架图;
图2为本发明***中模型数据存储单元的结构示意图;
图3为本发明***中插件运行库的第一种结构示意图;
图4为本发明***的模型运行引擎和第一种结构的插件运行库中实现插件功能的核心类构成及关系图;
图5为基本模型对象和插件模型对象的第一种内存状态图;
图6为本发明***中插件运行库的第二种结构示意图;
图7为本发明***的模型运行引擎和第二种结构的插件运行库中实现插件功能的核心类构成及关系图;
图8为基本模型对象和插件模型对象的第二种内存状态图;
图9为本发明方法的模型运行流程示意图;
图10为基本模型和插件模型的内存对象的创建和销毁流程意示图;
图11为基本模型和插件模型定义及应用流程意示图;
图12为插件实现类型程序集和插件装载类型程序集生成流程图;
图13为基本模型和插件模型的关系示意图;
图14为基本模型之间的继承关系图;
图15为实体与界面关系图;
图16为模型设计工具截图;
图17为业务元素定义截图;
图18为业务表定义截图;
图19为实体定义截图;
图20为界面定义截图;
图21为界面菜单定义截图;
图22为继承了Form Base界面的运行图;
图23为程序集定义截图;
图24为程序类定义截图;
图25为插件定义截图;
图26为插件参数定义截图;
图27为插件应用定义截图;
图28为插件应用定义中插件选择截图。
具体实施方式
如图1所示,第一种应用插件扩充模型驱动开发能力的***,包括模型数据存储单元、模型设计工具、业务数据存储单元、模型运行引擎以及插件运行库,模型数据存储单元包括基本模型数据存储单元;模型数据存储单元是用于存储模型数据的数据库或文件。
模型设计工具用于设计业务数据存储单元中的业务数据结构以及基本模型数据存储单元中的实体定义信息和界面定义信息,还用于设计插件运行库及插件模型数据存储单元中的程序集定义信息、程序类定义信息、插件定义信息和插件应用数据存储单元中的插件应用定义信息。
模型运行引擎用于定义业务元素类、字段类、业务表类、实体类和界面类,所业务元素类、字段类、业务表类、实体类和界面类构成基本模型类,所述基本模型类用于在内存中构造对应的基本模型对象;还包括插件支持程序集,插件支持程序集用于定义插件适配器类;基本模型类具有一个插件适配器类对象;插件适配器类对象可管理多个插件,插件是插件实现类运行后的内存表现形式;也叫插件实现类对象;模型运行引擎用于读取设计好的模型数据存储单元中的模型数据,根据读取的数据,调用基本模型类和插件实现类生成软件,根据用户操作并存取业务数据存储单元中的业务数据完成软件功能。
插件运行库包括插件实现类程序集;插件实现类程序集包括至少一个插件实现类,每个插件实现类用于实现相应插件的接口规范和插件功能;基本模型类通过插件适配器类对象管理多个插件。
如图2所示,模型数据存储单元还包括插件模型数据存储单元和插件应用数据存储单元;插件模型数据存储单元用于存储插件模型的数据,插件模型的数据包括程序集定义信息、程序类定义信息和插件定义信息,插件应用数据存储单元用于存储插件应用定义信息。
基本模型的数据包括界面定义信息和实体定义信息,界面定义信息包括控件定义信息和菜单定义信息,实体定义信息包括业务表定义信息和业务功能定义信息,业务表定义信息包括字段定义信息,字段定义信息包括业务元素定义信息;业务数据存储单元是存储业务数据的数据库或文件;
实体定义信息中包括业务表定义信息和功能定义信息。实体定义信息包括实体ID,实体名称等,实体ID是唯一标识一个实体的编号,实体名称是实体的命名,如图17所示。业务表定义信息中包括实体ID,业务表ID,主表ID,主子关系,增加,删除,修改,复制;其中实体ID标识了该业务表所属的实体,业务表ID唯一标识了一个业务表,主子关系确定了业务表之间的引用关系,增加,删除,修改,复制标识了此业务表是否可以增加,删除,修改,复制表中的记录,如图18所示。业务表ID指定的业务表是在表定义信息中,表定义信息包括业务表ID,业务表名称,原数据库名称,原表名,所属分类,其中业务表ID唯一标识了一个业务表定义信息,业务表名称是业务表在模型中的命名,原数据库名是此表在业务数据存储单元中的数据库名称,原表名指定了此业务表对应的数据库中的存储表名,所属分类指定了此表所属的子***,如表5所示。业务表定义还包括业务表的字段定义,字段定义信息包括业务表ID,字段ID,字段名称,业务元素,其中业务表ID指定该字段所属的业务表,字段ID唯一标识了一个字段的定义信息,字段名称对应于存储数据库中对应业务表中的字段,业务元素指定了该字段的数据类型,如表6所示。功能定义信息包括实体ID,功能ID,功能名称,实体ID标识此功能所属的实体,功能ID唯一标识一个功能定义,功能名称是功能命名,如表9所示。实体定义信息定义了业务表的结构和业务表的关系以及实体功能。
界面定义信息包括控件定义信息,菜单定义信息。界面定义信息定义了软件运行界面的样式,界面定义信息中包括界面ID,界面名称,界面所表现的实体,界面ID是唯一标识一个界面编号,实体是界面表现的数据来源,如表10所示。控件和菜单是构成界面的主要元素,控件定义信息中定义了控件的类型,表现的实体中的业务表和字段,如表11所示。菜单定义信息中定义了操作界面的菜单和工具条项目,如表12所示。
模型运行引擎可实现以下功能:
1]从基本模型数据存储单元中读取实体定义信息和界面定义信息;根据实体类生成实体类对象,根据界面类生成与实体类对象相应的界面类对象;所述界面类对象的屏幕表现就是操作界面;所述界面类对象表现的数据就是实体类对象的数据;
2]根据用户操作将业务数据存储单元中的业务数据读取至实体类对象中供用户通过操作界面查看;
3]根据用户操作将实体类对象的数据保存到业务数据存储单元中;
4]根据已生成的实体类对象和界面类对象读取插件应用定义信息中所对应的插件定义信息,并根据该插件定义信息调用所对应的插件实现类生成插件实现类对象,并使插件实现类对象和实体类对象及操作界面关联以控制实体类对象和界面类对象。
本发明的第二种结构的***,包括模型数据存储单元、模型设计工具、业务数据存储单元、模型运行引擎,插件运行库,模型数据存储单元包括基本模型数据存储单元;模型设计工具用于设计业务数据存储单元中的业务数据结构以及基本模型数据存储单元中的实体定义信息和界面定义信息;模型运行引擎用于定义业务元素类、字段类、业务表类、实体类和界面类,所述业务元素类、字段类、业务表类、实体类和界面类构成基本模型类,所述基本模型类用于在内存中构造对应的基本模型对象;
模型运行引擎还包括插件支持程序集,插件支持程序集用于定义插件接口、插件支持接口和插件适配器类;模型数据存储单元还包括插件模型数据存储单元和插件应用数据存储单元;插件模型数据存储单元用于存储插件模型的数据,插件模型的数据包括程序集定义信息、程序类定义信息和插件定义信息,所述插件应用数据存储单元用于存储插件应用定义信息;
插件接口中定义有一个基本模型类对象;实现插件接口的插件实现类必须实现此基本模型类对象;此基本模型类对象记录了实现此接口的插件实现类所服务的基本模型类对象;
基本模型类可实现插件支持接口;插件支持接口中具有一个插件适配器类对象;插件适配器类具有一个基本模型类对象,此基本模型类对象记录了此适配器类所属的基本模型对象;插件适配器类具有一个可管理多个插件的插件接口列表,插件是插件实现类运行后的内存表现形式;插件接口列表中可以记录对应的插件;
***还包括插件运行库;插件运行库包括插件实现类程序集和插件装载类程序集;插件实现类程序集包括至少一个插件实现类,每个插件实现类用于实现相应插件的接口规范和插件功能,插件装载类程序集包括至少一个插件装载类,插件装载类继承于插件适配器类,每个插件装载类可根据插件应用定义信息创建插件,并将创建的插件登记在插件接口列表中;基本模型类通过插件接口列表管理多个插件;模型设计工具还用于设计插件运行库及插件模型数据存储单元中的程序集定义信息、程序类定义信息、插件定义信息和插件应用数据存储单元中的插件应用定义信息。基本模型数据存储单元用于存储基本模型的数据,基本模型的数据包括界面定义信息和实体定义信息,界面定义信息包括控件定义信息和菜单定义信息,实体定义信息包括业务表定义信息和业务功能定义信息,业务表定义信息包括字段定义信息,字段定义信息包括业务元素定义信息;业务数据存储单元是存储业务数据的数据库或文件;
本***的模型运行引擎可实现的功能与第一种***模型运行引擎相同。
插件模型数据存储单元:插件模型数据存储单元用于存储程序集定义信息,程序类定义信息,插件定义信息。(插件模型是用于扩展基本模型描述能力的插件定义信息。插件是一种可以带参数的进一步描述基本模型对象的可复用的软件组件,基本模型对象就是一个具体的基本模型;所述插件模型由程序集信息定义、程序类信息定义和插件信息定义组成;)其中程序集定义信息包括程序集ID,程序集名称,程序集类型,是否为动态,程序集ID唯一标识一个程序集定义信息,程序集名称标识程序集文件名称,程序集类型标识程序集运行的地点。是否为动态标识程序集是否可以被模型设计工具动态生成,程序集类型分为公用插件,客户端插件,服务端插件,公用插件是服务端和客户端都可以运行的插件,服务端插件只能运行在服务端,客户端插件只能运行在客户端,程序集定义信息如表13所示。其中程序类定义信息包括程序类ID,程序类名称,程序类类型,程序集ID,程序类代码,程序类ID唯一标识一个程序类定义信息,程序类名称标识程序类在程序集文件中定义的名称,程序集ID标识了此程序类所属程序集,程序类类型定义了程序类是用于哪种插件类型,程序类代码用于存储此程序类的实现代码,程序类定义信息如表14所示。其中插件定义信息包括插件ID,插件名称,插件主体对象类型,客户端实现类ID,服务端实现类ID,插件ID唯一标识一个插件定义信息,插件名称是一个有意义的插件命名,插件主体对象类型标识了此插件可以应用的基本模型对象类型,客户端实现类ID标识此插件的客户端实现类,服务端实现类ID标识该插件的服务端实现类,插件定义信息如表15所示。插件定义信息中还包括插件参数定义信息,插件参数定义信息包括插件ID,参数名称,参数类型,参数默认值,参数说明,插件ID标识了该参数所属的插件,参数名称标识了插件ID对应插件的参数名称,参数类型是参数的数据类型,参数说明是对该插件参数的使用说明,如表16所示。
插件应用数据存储单元:插件应用数据存储单元用于存储插件的应用定义信息。插件应用定义信息包括插件应用ID,模型对象ID,模型对象类型,插件ID,是否启用,插件应用ID唯一标识了一个插件在一个基本模型对象上的扩展定义信息,模型对象ID标识了该应用的基本模型对象,模型对象类型标识该模型对象的类型,插件ID标识了应用在该模型对象上的插件。是否启用标识了此插件应用是否生效,生效时则模型引擎在执行模型时会自动装载该插件,不启用时则不装载该插件。
模型设计工具:模型设计工具用于设计基本模型数据存储单元的基本模型定义信息,设计插件模型数据存储单元中的插件模型定义信息、设计插件应用数据存储单元中的插件应用定义信息,设计插件运行库,设计业务数据存储单元中的业务数据结构,主界面如图16所示,模型设计工具包括业务元素定义信息设计工具(图17),业务表定义信息设计工具(图18),实体定义信息设计工具(图19),界面定义信息设计工具(图20、21),程序集定义信息设计工具(图23),程序类定义信息设计工具(图24),插件定义信息设计工具(图25、26),插件应用定义信息设计工具(图27、28)。
业务数据存储单元:业务数据存储单元是用于存储业务数据的文件或数据库,业务数据的存储结构与基本模型数据存储单元中的业务表定义信息一致。
模型运行引擎:模型运行引擎包括基本模型类程序集和插件支持程序集,所述基本模型类程序集中定义了业务元素类、业务表类、实体类和界面类;插件支持程序集中定义了插件接口、插件支持接口、插件适配器类。如图4所示。模型运行引擎是用于读取模型数据存储单元中的模型信息并调用相关的基本模型类和插件实现类从而动态生成模型内存对象和操作界面,同时根据用户操作存取业务数据存储单元中的业务数据。
插件接口IPlugin提供一个规范来约束插件实现类必须实现的属性和方法,接口成员有(1)基本模型类对象owner属性记录了一个插件依附的主体对象(基本模型对象),(2)布尔类型对象Active属性用于标记插件启用状态,状态为false时断开主体对象事件和插件实现类中处理方法的关联。状态为true时建立主体对象事件和插件实现类中处理方法的关联。插件实现类必须继承此接口,实现此接口的属性和方法来完成插件功能。
插件适配器类PluginSocket维护了一个插件接口列表属性list和插件装载方法load,(1)list属性是一个IPlugin结构的列表对象,此列表用来管理一系列附加在基本模型对象上的插件信息,Load方法是一个虚方法,继承与此插件适配器类的插件装载类在此方法中将定义在此基本模型对象上的插件依次登记在插件接口列表中。插件装载类是由模型设计工具根据插件定义信息和应用定义信息自动生成的。模型运行引擎加载完基本模型对象后调用该对象的插件装载类的load方法把定义在此基本模型对象的插件实现类创建起来并登记在插件适配器的插件接口列表中。
插件支持接口ISupportPlugin维护了支持基本模型对象管理其插件的一系列属性和方法,(1)Plugins属性,此属性是插件适配器类PluginSocke类型,此结构用于管理所有附着在此基本模型对象上的插件实现类对象信息,(2)CreatePlugins方法,在基本模型对象创建后调用该方法将定义在此基本模型对象上的插件创建起来。(3)ActivatePlugins方法按顺序启用该基本模型对象上附加的所有插件,插件建立基本模型类对象事件与插件处理方法的关联。(4)DeactivatePlugins方法,此方法按与启用插件相反的顺序断开基本模型对象所附着插件的处理方法与基本模型类对象事件的关联。为了使基本模型类对象能动态的应用插件扩展功能,基本模型类必须实现此接口。
基本模型类包括业务元素类,字段类,业务表类,实体类,界面类,各种控件类,菜单类。所有基本模型类定义中都实现了插件支持接口ISupportPlugin,使基本模型可以用插件扩展其功能。如下代码所示:其中的TModel可以是业务表类型TTable,实体类型TEntity等基本模型类。public class TModel:ISupportPlugin<TModel>
{  //插件适配器
   PluginSocket<TModel>Plugins
   {
       get{return Plugins;}
   }
    void CreatePlugins()
    {
        //此方法将模型定义中已定义的插件创建起来。
        //可以调用插件的装载类型的load方法来实现此功能
    }
    void ActivatePlugins()
    {
           //此方法按顺序启用本主体挂接的所有插件,插件自动建立模
型主体事件与插件处理方法的关联。
         //可以将各插件实现类型的active值设置为true来实现。
    }
    void DeactivatePlugins()
    {
        //此方法按相反顺序断开本主体所挂插件的处理方法与主体事件
的关联。
        //可以将各插件实现类型的active值设置为false来实现。
    }
}
插件运行库:插件运行库包括插件实现类程序集和插件装载类程序集,如图6所示,插件实现类程序集包含了用于实现插件功能的插件实现类,插件装载类程序集包含了用于装载插件的插件装载类,插件装载类用于将插件实现类对象装载到插件适配器的插件接口列表中。
插件实现类是由用户编写的实现插件功能的代码。此类必须实现IPlugin接口,接口中的属性owner为此插件实现的主体对象,属性Active的set方法中,如果active为true则设置主体对象事件与实现类处理方法的关联,如为false则设置主体对象事件与实现类处理方法的断开。插件实现类的代码编译后生成的程序集会合并到插件运行库中的插件实现类程序集中。插件实现类代码框架如下所示:
   public class Model_Plugin:IPlugin<TModel>
{
     private TModel_Owner;//主体对象(也是基本模型对象)
      TModel Owner
     {
         get{return_Owner;}
     }
private bool_Active;
//激活状态标记,在用模型设计工具设置参数时将此状态置为false断
  开主体对象事件与插件相应方法的关联。
//当参数设置完毕后模型设计工具会将此状态置为true,挂接主体对象事件与插件
//相应方法的关联。
public bool Active
{
    get
    {
       return_Active;
    }
    set
    {
      if(value)
      {
         //挂接模型主体对象事件与插件对应方法的关联
         this.Owner.Event+=Event;
      }
      else
      {
         //断开模型主体对象事件与插件对应方法的关联。
         this._Owner.Event-=Event;
      }
      this.Active=value;
    }
}
[PluginParam]//标记此参数为可被模型工具调整的参数
public string Param1;//开发人员可调插件的参数。
private string_Param1;//插件内部属性。
//插件构造方法,插件装载类在创建此插件实现类的对象时会自动调用此构造方法。
//此构造方法传递主体对象给插件实现类。
public Model_Plugin(TModel owner)
{
     this._Owner=owner;
    //构造方法处理必要属性的初始化
 }
public void Event(object sender,EventArgs e)
{
    //主体对象事件响应处理代码
    //在此处实现插件功能代码
}
public void Dispose()//处理资源的释放
{
    this.Active=false;
    //处理其他资源释放
}
}
插件装载类PluginLoader是模型设计工具根据插件应用设置信息自动生成的一个类,此类继承与插件适配器类,实现了插件适配器类中的虚方法load方法,在此方法中将所属该主体对象的所有插件都创建起来并装载到其插件接口列表list中。此类代码在内存中生成并编译后合并到插件运行库中的插件装载类程序集中。生成的代码框架如下所示:
//插件装载类代码示例(此部分代码由模型设计工具自动生成)
  public class PluginLoader:PluginSocket<TModel>
{
  public override void Load(TModel sender)
  {
      //将挂在此基本模型对象上的插件也依次加入列表。
      Model_Plugin1 p1=new Model_Plugin1(sender);
      p.Param1=″ParamValue″;
      this.List.Add(p1);
      Model_Plugin1 p2=new Model_Plugin2(sender);
      p2.Param1=″ParamValue″;
      this.List.Add(p2);
  }
}
本发明原理:本发明的插件不同于一般意义上的插件,是一种可以带参数的进一步描述基本模型对象的可复用的软件组件,插件必须附着在基本模型对象上,也称为插件的主体对象,让主体对象满足一定的业务规则或者让主体对象实现一定的功能。插件可以自动响应主体对象的消息并自动完成相关操作。插件模型就是一种可以解决业务领域问题的插件定义。同一个基本模型对象可以使用多个插件模型扩充其描述能力,并用插件完成其功能。同一个插件也可以通过调整参数对不同基本模型对象扩充功能。
在本发明如上所述生成应用软件原理和方法下,结合附图进一步说明本发明的***构成和实施方式。使用本发明的方法进行软件开发的步骤如下:
步骤1:根据需求分析,模型设计工具建立模型运行引擎据以运行的实体定义信息和界面定义信息并存储在基本模型数据存储单元中;
步骤1的具体步骤如下:
1.1模型设计工具建立业务元素定义信息;
1.2模型设计工具引用业务元素定义信息建立业务表定义信息;
1.3模型设计工具引用业务表定义信息建立实体定义信息;
1.4模型设计工具引用实体定义信息建立界面定义信息;
1.5将上述信息存储到基本模型数据存储单元中;
业务元素定义:业务元素是对字段的数据类型进行业务领域概念的定义,如销售***中的数量,金额,折扣等概念,只有在销售***中才有特殊的意义,财务***中的“借方”,“贷方”等在财务***中才有意义,而本发明设计一套软件都是针对某业务领域的软件***,在***中的各个模块中会大量出现概念相同的字段类型定义。如在销售***中的销售出库制单业务中和销售订货制单业务中都会用到价格字段,虽然在二个业务中一个是销售价格,一个是订货价格,但价格在计算中都会使用相同的数据类型进行,如指定为计算机可识别的money或decimal等数据类型,但此种类型是面向计算机的,一般只有编程人员才能理解他的实际意思,而模型驱动开发是面向业务的开发方法,不懂编程的设计人员或业务人员也可以设计***,让他们能正确设计***,必须使用一种方法指定计算机数据类型和业务概念相对应的影射关系,业务元素就是为了完成此种功能的,方法为:使用模型设计工具建立业务元素定义信息,如将业务领域内的概念“数量”定义为业务元素名称为“数量”,实际类型为int或float的计算机***可识别的类型,价格定义为业务元素名称为“价格”,实际类型为“money”或“decimal”的计算机***可识别的类型,这样在设计业务表中构成的字段时就可以直接使用业务元素来定义字段的类型了,业务元素定义步骤为:(1)找到模型设计工具中的业务元素维护工具(见图16中的“业务元素定义”),并点击打开业务元素维护界面,(2)在业务元素维护界面中点击“新增”打开新建业务元素界面(见图17),(3)输入业务元素名称,类型等信息,(4)保存并完成业务元素定义。如表4是已完成的部分业务元素定义信息。
业务表定义:业务表是构成业务***存储信息的最基本的数据结构,是一个二维的关系表。每一列用于表示一个业务对象的构成属性,在计算机***中也叫字段或域,每一行用于表示一个对象数据,如表1、2、3所示就是构成一个简单销售订单***的三个表(销售订单主表,销售订单明细表,和一个客户信息表),业务表定义就是定义业务表的属性和组成这个表的字段属性。字段属性中的业务元素项可以指定为已定义的业务元素。指定后此字段就使用业务元素的类型来使用和存储此字段数据,也会自动处理在业务元素上定义的所有业务规则。业务表定义步骤为:(1)找到模型设计工具中业务表维护项(参见图16中的“表定义”),点击并打开业务表维护界面(2)在业务表维护界面中点击“新增”打开新建业务表界面(参见图18),(3)输入业务表名称,所属分类,原数据库名,原表名等信息,(5)添加此表的字段信息(字段名称,业务元素,长度等信息),(6)保存并完成业务表定义。如表5是对业务表1、2、3进行定义的信息,表6是对业务表1、2、3中的字段定义信息。
表1、业务表-客户信息表
  客户编号   客户名称   联系电话   联系人   银行帐号
  0001   五星电子公司   12345678   张三   111111111
表2、业务表-销售订单主表
  订单编号   客户名称   业务员   订货日期   金额合计
  SO20100001   五星电子公司   ***   2010-8-1   70000
表3、业务表-销售订单产品表
  序号   产品名称   订购数量   订购单价   小计   其他属性。。。
  1   A产品   10   2000   20000
  2   B产品   20   2500   50000
表4、基本模型-业务元素定义信息
  业务元素ID   业务元素名称   业务元素别名   数据类型   其他属性。。。
  1001   Quantity   数量   decimal
  1002   Price   价格   Money
  1003   Money   金额   Money
  1004   Date   日期   Datetime
  1005   SeqNo   序号   int
  1006   Name   名称   string
  1007   Telphone   电话号码   string
  1008   BankAccount   银行帐号   string
表5、基本模型定义——业务表定义信息
  业务表ID   业务表名称   业务表别名   原数据库名   原表名   所属分类
  2001   销售订单   销售订单   MyDB   SaleOrder   订单***
  2002   销售订单明细   销售订单明细   MyDB  SaleOrderDetial   订单***
  2003   客户信息   客户资料   MyDB  Customer   订单***
表6、基本模型-业务表字段定义信息
业务表ID 字段ID 字段名称 字段别名 业务元素 字段其他属性
  2001   200101   SaleOrderNo   订单编号   单据编号
  2001   200102   Operator   业务员   名称
  2001   200103   OrderDate   订购日期   日期
  2001   200104   CustomerName   客户姓名   名称
  2001   200105   Amount   金额合计   金额
  2002   200201   SaleOrderNo   订单编号   单据编号
  2002   200202   SeqNo   序号   序号
  2002   200203   ProductName   产品名称   名称
  2002   200204   Qutity   订购数量   数量
  2002   200205   Price   订购单价   金额
  2002   200206   SubTotal   小计   金额
  2003   200301   customerNo   客户编号   序号
  2003   200302   CustomerName   客户名称   名称
  2003   200303   Phone   联系电话   电话号码
  2003   200304   Principal   联系人   名称
  2003   200305   BankAccount   银行帐号   银行帐号
实体定义信息,本发明中的实体是指一个可操作的、意义完整的业务对象,如图2所示,一个实体是由若干业务表和若干操作实体的功能组成,对实体定义就是定义这个实体所组成的业务表、业务表之间的引用关系和实体的功能。实体功能就是操作此实体数据的功能的集合。基本模型的实体中已预定义了业务表的增删改查功能定义信息,模型运行库已包含了业务表的增删改查功能执行代码,设计人员可以通过模型设计工具启用或禁用这些功能,复杂实体功能由插件实现。实体定义步骤为:(1)在模型设计工具中找到实体维护项(参见图16中的“实体定义”),并点击打开实现维护界面(2)在实现维护界面中点击“新增”打开新建实体界面(参见图19),(3)输入实体名称,实体类型,实体分类等信息,(4)定位到业务表定义,点击添加,依次添加此实体的业务表并设计之间的关系,(5)定位到业务功能定义,添加此实体的功能定义(6)保存并完成实体定义。如表7为实体定义信息,表8为实体中的业务表定义,表9为实体中的功能定义。
表7、基本模型-实体定义信息
  实体ID   实体名称   实体别名   其他属性。。。
  3001   Ety_SaleOrder   销售订货业务
表8、基本模型-实体中的业务表定义信息
Figure BDA0000026546670000211
表9、基本模型-实体中的业务功能定义信息
  实体ID   功能ID   功能名称   功能别名   其他属性。。。
  3001   300101   Audit   订单审核
界面定义信息,界面是用户操作实体对象的用户接口,如图2所示界面由若干界面控件组成。界面定义就是定义用户操作实体的软件界面属性和界面所组成的控件。一个界面唯一表现一个实体,但一个实体可以由若干用户界面表现。如图12所示,如需要实现特殊界面效果也可以在界面层定义插件来实现。业务界面定义步骤为:(1)在模型设计工具中找到界面维护项(参见图16中的“界面定义”),并点击打开界面维护界面(2)在界面维护界面中点击“新增”打开新建界面的界面(参见图20),(3)输入界面名称,选择界面类型,选择界面所属分类,选择界面表现的实体等信息,(4)定义界面的控件信息,界面控件信息可以自动生成,(5)定义界面的菜单和工具栏信息,(6)保存并完成界面定义,如表10是界面定义信息,表11为界面中的控件定义信息,界面控件定义信息,表12为界面中的菜单定义信息。
表10、基本模型-界面定义信息
  界面ID   界面名称   实体ID   其他属性
  4001   UI_SaleOrder   3001
表11、基本模型-界面控件定义信息
表12、基本模型-界面菜单定义信息
  界面ID   界面菜单ID   菜单名称   菜单功能   其他属性
  5001   500101   审核   audit
步骤2:模型设计工具根据所建立的相关信息定义相应的业务数据结构,并存储到业务数据存储单元中;
步骤2的具体步骤如下:模型设计工具根据业务表定义信息定义业务数据结构,并生成业务数据存储单元中的业务数据结构;
步骤3:根据需求分析,模型设计工具建立插件模型的数据,并存储在插件模型数据存储单元中;
步骤3的具体步骤如下:
3.1模型设计工具建立程序集定义信息;
3.2模型设计工具建立程序类定义信息,并指定其中的程序类所属的程序集;
3.3模型设计工具建立插件定义信息,指定其中实现插件功能的程序类;
3.4将上述信息存储到插件模型数据存储单元中;
步骤4:根据上述插件定义信息,模型设计工具编写相应的插件实现类代码,并编译生成插件实现类程序集;
步骤4的具体步骤如下:
4.1根据插件定义信息,模型设计工具生成一个插件实现类代码框架;
4.2模型设计工具根据插件实现类代码框架编写插件实现类代码;
4.3模型设计工具根据插件实现类代码编译并生成插件实现类程序集;
步骤5:使用模型设计工具定义与基本模型对应的插件应用定义信息,并存储到插件应用数据存储单元中;
步骤5的具体步骤如下:
模型设计工具引用基本模型定义信息和插件模型定义信息,定义与基本模型对应的插件应用定义信息,并存储到插件应用数据存储单元中;
步骤6:使用模型运行引擎运行基本模型和插件模型。
步骤6的具体步骤如下:如图10所示:
6.1创建基本模型对象及其子对象,模型运行引擎从基本模型数据存储单元中读取实体定义信息和界面定义信息,根据实体类生成实体类对象,根据界面类生成界面类对象;
6.2创建基本模型类对象的插件,根据已生成的基本模型类对象,读取插件应用数据存储单元中相应的插件应用定义信息,根据插件应用定义信息读取插件模型数据存储单元中的程序集定义信息和程序类定义信息,根据程序集定义信息中的程序集名称调用对应程序集中的程序类创建插件实现类对象;并将所创建的插件实现类对象记录在基本模型类对象的插件适配器类对象中;
6.3建立基本模型类对象和插件实现类对象的关联,将插件实现类对象记录在插件适配器类对象后,调用基本模型对象及其子对象的插件启用方法建立插件实现类相应方法与基本模型类对象及其子对象事件的关联,此插件启用方法中设置插件适配器类对象中的各插件实现类对象的激活属性,此激活属性会在激活时建立基本模型类对象及其子对象的事件与插件实现类对象中相应方法的关联,此激活属性会在禁用时断开基本模型类对象及其子对象的事件与插件实现类对象中相应方法的关联;
6.4运行过程中,插件实现类对象响应基本模型类对象及其子对象的事件并执行相应方法完成插件功能;
6.5基本模型类对象及其子对象在销毁前先断开其事件与插件实现类对象相应方法的联系,并销毁插件实现类对象;
6.6销毁基本模型类对象及其子对象。
第二种应用插件扩充模型驱动开发能力的方法,包括以下步骤:
步骤1:根据需求分析,模型设计工具建立模型运行引擎据以运行的实体定义信息和界面定义信息并存储在基本模型数据存储单元中;
步骤1的具体步骤如下:
1.1模型设计工具建立业务元素定义信息;
1.2模型设计工具引用业务元素定义信息建立业务表定义信息;
1.3模型设计工具引用业务表定义信息建立实体定义信息;
1.4模型设计工具引用实体定义信息建立界面定义信息;
1.5将上述信息存储到基本模型数据存储单元中;
步骤2:模型设计工具根据所建立的相关信息定义相应的业务数据结构,并存储到业务数据存储单元中;所述步骤2的具体步骤如下:
步骤2的具体步骤如下:模型设计工具根据业务表定义信息定义业务数据结构,并生成业务数据存储单元中的业务数据结构;
步骤3:根据需求分析,模型设计工具建立插件模型的数据,并存储在插件模型数据存储单元中;
步骤3的具体步骤如下:
3.1模型设计工具建立程序集定义信息;
3.2模型设计工具建立程序类定义信息,并指定其中的程序类所属的程序集;
3.3模型设计工具建立插件定义信息,指定其中实现插件功能的程序类;
3.4将上述信息存储到插件模型数据存储单元中;
步骤4:根据上述插件定义信息,模型设计工具编写相应的插件实现类代码,并编译生成插件实现类程序集;
步骤4的具体步骤如下:
4.1根据插件定义信息,模型设计工具生成一个插件实现类代码框架;
4.2模型设计工具根据插件实现类代码框架编写插件实现类代码;
4.3模型设计工具根据插件实现类代码编译并生成插件实现类程序集;
步骤5:使用模型设计工具定义与基本模型对应的插件应用定义信息,并存储到插件应用数据存储单元中,同时生成相应的插件装载类,并将其存储到程序类定义信息中,同时将生成的插件装载类编译并合并到插件装载类程序集中;
步骤5的具体步骤如下:模型设计工具引用基本模型定义信息和插件模型定义信息,定义与基本模型对应的插件应用定义信息,并存储到插件应用数据存储单元中,同时生成相应的插件装载类,并将其存储到程序类定义信息中,同时将生成的插件装载类编译并合并到插件装载类程序集中;
步骤6:使用模型运行引擎运行基本模型和插件模型。
步骤6的具体步骤如下:
6.1创建基本模型类对象及其子对象,模型运行引擎从基本模型数据存储单元中读取实体定义信息和界面定义信息,根据实体类生成实体类对象,根据界面类生成界面类对象;
6.2创建基本模型类对象的插件,根据已生成的基本模型类对象,读取插件应用数据存储单元中相应的插件应用定义信息,根据插件应用定义信息读取插件模型数据存储单元中的程序集定义信息和程序类定义信息,根据程序集定义信息中的程序集名称调用插件装载类程序集中的插件装载类相应装载方法创建插件实现类对象;并将插件实现类对象记录到基本模型类对象的插件适配器类对象中的插件接口列表中;
6.3建立基本模型类对象和插件的关联,将插件登记在插件适配器类对象的插件接口列表后,调用基本模型类对象及其子对象的插件启用方法建立插件实现类对象与基本模型类对象及其子对象事件的关联,此插件启用方法中设置插件适配器类对象的插件接口列表中所记录的各插件实现类对象的激活属性,此激活属性会在激活时建立基本模型类对象及其子对象的事件与插件实现类对象中相应方法的关联;模型运行引擎还可以在运行时断开插件与基本模型对象的关联,并修改其插件参数,修改后再重新建立与基本模型对象的关联。
6.4运行中,插件实现类对象响应基本模型类对象及其子对象的事件并执行相应方法完成插件功能;
6.5基本模型类对象销毁前先断开其事件与插件实现类对象相应方法的联系,并销毁插件实现类对象;
6.6销毁基本模型类对象及其子对象。
如图14所示,本发明中的基本模型是可以相互继承的,子模型继承父模型后自动拥有父模型所有的结构和功能。有益效果在于在模型驱动开发方法下可以更有效的重复利用模型和定义在模型上的插件,比如只要在顶级界面上实现一个功能则继承于此界面的界面定义都会自动实现此功能。如图21定义了一个子窗口界面ChildFormBase,其中定义了基本的菜单项,而图20的界面定义继承自此界面定义(参见图20中的继承界面项),所以图20的界面运行以后会自动拥有图21中所定义的菜单项,如图22所示。
如图2所示,本发明中的基本模型拥有逻辑上的包含的关系,比如实体模型包含有业务表定义和实体功能定义,界面定义包含控件定义、界面功能定义和菜单工具条定义。在本发明中,所有具有父模型的基本模型在构造模型对象时都会构造一个指向父模型对象的属性Owner,这样做的有意效果在于在插件实现类代码编写过程中可以更方便的访问和控制基本模型对象。比如一个定义在字段级的插件实现类代码中可以通过this.Owner访问到字段所属的业务表。
本发明的模型数据存储单元和业务数据存储单元是低偶合的,一套模型数据存储单元可以描述若干套业务数据存储单元。
程序集定义信息:程序集是程序类代码编译后的可执行代码集合,程序集就是软件组件的集合,本发明的程序集分为服务端程序集、客户端程序集、公用程序集。程序集可指定为动态程序集和静态程序集,动态程序集是指在运行过程中可动态的构建和维护的程序集,静态程序集是指运行过程中只能调用程序集而不能修改程序集,程序集定义就是对模型运行中引用到的程序集信息在模型数据存储单元中进行描述登记,程序集定义步骤为:(1)在模型设计工具中找到程序集维护项(参见图16中的“程序组件”),并点击打开程序集维护界面,(2)在该界面中点击“新增”打开新建程序集界面(参见图23),(3)输入程序集名称,程序集类型,程序集位置,是否为动态等信息,(4)保存并完成程序集定义。模型运行引擎根据这些定义信息动态的维护程序集和使用其中的程序类。本发明中的插件实现类编译后的结果文件就是动态程序集文件。只有指定为动态程序集才能在运行过程中把动态生成的程序类信息增加到对应程序集中。如表13为程序集定义信息。
表13、插件模型-程序集定义信息
程序集ID 程序集名称 程序集类型 是否为动态 说明
  6001   Asm.CommPlugin   公用插件   否
  6002   Asm.SaleOrder.ClientPlugin   客户端插件   是
  6003   Asm.SaleOrder.ServerPlugin   服务端插件   否
程序类定义信息:程序类是一种有结构的功能代码集合,本发明所说的程序类是指插件功能实现类和插件装载类,在编写和使用一个插件之前先在插件模型存储单元中定义此插件功能实现类信息,程序类定义就是用模型设计工具对程序类信息在插件模型数据存储单元中进行描述登记,程序类定义步骤为:(1)在模型设计工具中找到程序类维护项(参见图16中的“程序类”),并点击打开程序类维护界面,在该界面中点击“新增”按钮打开新增程序类界面(参见图24),(2)输入程序类名称,选择所属程序集,(3)选择所属类型,(4)保存并完成程序类定义。模型运行引擎在加载插件过程中根据这些描述信息动态的构建具体的程序类对象来实现插件功能。如表14是订单***用到的程序类定义信息。
表14、插件模型-程序类定义信息
Figure BDA0000026546670000261
插件定义:本发明的插件由插件实现类和插件装载类组成,插件实现类用于实现插件功能,插件装载类用于装载插件实现类对象到基本模型对象上的插件适配器中,插件定义就是用模型设计工具对插件实现类及其参数信息在插件模型存储单元中进行描述登记,插件定义步骤为:(1)在用模型设计工具中找到插件维护项(参见图16中的“插件定义”),并点击打开插件定义维护界面(2)在该界面中点击“新增”打开插件定义界面(参见图25),(3)输入插件名称,指定可***模型对象类型,指定客户端处理类,指定服务端处理类,指定插件各个参数信息(参见图26)(参数名称,参数类型,参数缺省值等),(4)保存并完成插件定义。如表15是订单***用到的插件定义信息。表16是订单***中插件的参数定义信息。
表15、插件模型-插件定义信息
表16、插件模型-插件参数定义信息
Figure BDA0000026546670000272
Figure BDA0000026546670000281
编写插件实现类:插件实现类是完成插件功能的程序代码段,插件实现类通过响应基本模型对象的消息完成插件功能,插件实现类在基本模型对象创建后由插件装载类型自动创建,在基本模型对象释放前释放。编写一个插件实现类型步骤为:
(1)使用模型设计工具自动生成一个已定义的插件实现类代码框架;
(2)插件设计人员根据实现类代码框架和业务功能需求使用模型设计工具或第三方工具编写插件功能的实现类代码;
(3)插件实现类编写完成后编译并生成插件实现类程序集。
使用模型设计工具定义与基本模型对应的插件应用定义信息:当利用模型设计工具对软件***基本建模后仍无法完成复杂业务功能需求时可以利用插件模型对基本模型对象进行扩展定义。应用插件扩展基本模型对象步骤为(1)使用模型设计工具打开基本模型设计界面(参见图17到图21),选择一个要用插件扩展功能的基本模型对象,(2)点击“插件”项打开插件定义界面(参见图27),点击“PluginName”项会弹出插件选择窗口(参见图28),在插件选择窗口中选择一个已定义的插件,针对此基本模型对象业务功能需要设置插件参数,(3)保存定义并完成业务模型功能扩展。如图27所示,模型设计工具会根据插件实现类信息和参数定义信息自动生成插件的装载类型代码并在程序类定义信息中登记一个插件装载类定义信息并把生成的装载代码一并存储在类代码项,模型运行引擎根据此登记的信息动态调用插件装载类来创建插件实现类的对象。与一般的代码模版生成的类不同,此装载类代码只包含装载代码,而不包含实现代码,插件装载类是根据附加在基本模型对象上的所有插件动态生成插件装载类代码。插件参数可以是常量,变量,表达式,脚本和代码片段。丰富的插件参数类型可以通过调整参数提供灵活强大的通用插件功能。如图13所示,一个基本模型对象同时可以使用若干个插件扩展其功能,同一个插件也可以通过调整参数来为不同的基本模型对象提供服务。如表17,18是对订单***中应用的插件应用定义信息。
表17、插件应用定义信息-插件部分
Figure BDA0000026546670000291
表18、插件应用定义信息-参数部分
Figure BDA0000026546670000292
运行模型:如图9所示,模型运行过程如下:
(1)模型运行引擎启动后读取基本模型存储单元中实体定义信息和相关界面定义信息并从插件应用数据存储单元中找出与之对应的插件应用定义信息;
(2)根据基本模型类和插件实现类,在内存中创建基本模型类对象和插件实现类对象;
(3)接着显示操作界面并等待用户操作;
(4)用户通过操作软件界面进行业务处理;
(5)基本模型类对象在需要存取业务数据的时候调用相应方法访问业务数据存储单元存取业务数据,完成软件功能。
维护模型:使用本发明开发的软件***具体良好的可维护性,可以在***运行态进行可视的查看、修改软件模型进行软件维护,并随时能在运行态看到运行效果。软件文档也会随维护模型而自动同步变更。应用本发明方法所开发的软件解决了普通方法开发软件的维护困难的问题,本发明以模型为中心的开发方法使得软件的开发周期变短,软件生命周期变长,是可随用户业务***变化而变化的智能软件***。模型就是软件,模型就是文档,对模型的维护就是对软件的维护。
术语解释:
基本模型:构成软件组成部件的结构,功能,界面的描述定义;
插件模型:扩展软件基本模型的插件描述定义;
基本模型对象:具体的基本模型,有业务元素,字段,业务表,实体,功能,菜单,控件等;
基本模型类:用于定义基本模型对象结构的程序类,有业务元素类,字段类,业务表类,实体类,功能类,控件类,与基本模型对象一一对应;
基本模型类对象:基本模型类运行后的内存表现就叫基本模型类对象;
插件:插件是一种可以带参数的进一步描述基本模型对象的可复用的软件组件;
插件实现类:实现插件功能的程序类;
插件实现类对象:插件实现类运行后的内存表现;
插件装载类:用于将插件实现类对象创建并登记到插件适配器中的程序类,插件装载类在创建插件实现类对象时会将插件的参数信息传递给创建的插件实现类对象;插件装载类是由模型设计工具根据插件的定义信息和参数定义信息生成的;
插件运行库:含有插件实现类的一个或多个程序集或动态链接库;
程序集:程序集是一种含有程序数据和代码的文件,其中可以包含多个程序类;可供其他程序或程序集调用;
动态链接库:动态链接库是一种含有程序数据和代码的文件,其中可以包含多个程序类;可供其他程序或动态链接库调用;
主体对象:是相对于插件来说的插件附着的对象,也就是基本模型对象。

Claims (8)

1.一种应用插件扩充模型驱动开发能力的***,包括模型数据存储单元、模型设计工具、业务数据存储单元、模型运行引擎,
所述模型数据存储单元包括基本模型数据存储单元;所述模型数据存储单元是用于存储模型数据的数据库或文件;
所述模型设计工具用于设计业务数据存储单元中的业务数据结构以及基本模型数据存储单元中的实体定义信息和界面定义信息;
所述模型运行引擎用于定义业务元素类、字段类、业务表类、实体类和界面类,所述业务元素类、字段类、业务表类、实体类和界面类构成基本模型类,所述基本模型类用于在内存中构造对应的基本模型对象;
其特征在于:
所述模型运行引擎还包括插件支持程序集,所述插件支持程序集用于定义插件适配器类;
所述模型数据存储单元还包括插件模型数据存储单元和插件应用数据存储单元;所述插件模型数据存储单元用于存储插件模型的数据,所述插件模型的数据包括程序集定义信息、程序类定义信息和插件定义信息,所述插件应用数据存储单元用于存储插件应用定义信息;
所述基本模型类具有一个插件适配器类对象;所述插件适配器类对象可管理多个插件,所述插件是插件实现类运行后的内存表现形式;也叫插件实现类对象;
所述***还包括插件运行库;所述插件运行库包括插件实现类程序集;所述插件实现类程序集包括至少一个插件实现类,每个插件实现类用于实现相应插件的接口规范和插件功能;
所述基本模型类通过插件适配器类对象管理多个插件;
所述模型设计工具还用于设计插件运行库及插件模型数据存储单元中的程序集定义信息、程序类定义信息、插件定义信息和插件应用数据存储单元中的插件应用定义信息。
2.根据权利要求1所述的应用插件扩充模型驱动开发能力的***,其特征在于:
所述基本模型数据存储单元用于存储基本模型的数据,所述基本模型的数据包括界面定义信息和实体定义信息,所述界面定义信息包括控件定义信息和菜单定义信息,所述实体定义信息包括业务表定义信息和业务功能定义信息,所述业务表定义信息包括字段定义信息,所述字段定义信息包括业务元素定义信息;
所述业务数据存储单元是存储业务数据的数据库或文件;
所述模型运行引擎可实现以下功能:
1]从基本模型数据存储单元中读取实体定义信息和界面定义信息;根据实体类生成实体类对象,根据界面类生成与实体类对象相应的界面类对象;所述界面类对象的屏幕表现就是操作界面;所述界面类对象表现的数据就是实体类对象的数据;
2]根据用户操作将业务数据存储单元中的业务数据读取至实体类对象中供用户通过操作界面查看;
3]根据用户操作将实体类对象的数据保存到业务数据存储单元中;
4]根据已生成的实体类对象和界面类对象读取插件应用定义信息中所对应的插件定义信息,并根据该插件定义信息调用所对应的插件实现类生成插件实现类对象,并使插件实现类对象和实体类对象及操作界面关联以控制实体类对象和界面类对象。
3.一种应用插件扩充模型驱动开发能力的***,包括模型数据存储单元、模型设计工具、业务数据存储单元、模型运行引擎,
所述模型数据存储单元包括基本模型数据存储单元;
所述模型设计工具用于设计业务数据存储单元中的业务数据结构以及基本模型数据存储单元中的实体定义信息和界面定义信息;
所述模型运行引擎用于定义业务元素类、字段类、业务表类、实体类和界面类,所述业务元素类、字段类、业务表类、实体类和界面类构成基本模型类,所述基本模型类用于在内存中构造对应的基本模型对象;
其特征在于:
所述模型运行引擎还包括插件支持程序集,所述插件支持程序集用于定义插件接口、插件支持接口和插件适配器类;
所述模型数据存储单元还包括插件模型数据存储单元和插件应用数据存储单元;所述插件模型数据存储单元用于存储插件模型的数据,所述插件模型的数据包括程序集定义信息、程序类定义信息和插件定义信息,所述插件应用数据存储单元用于存储插件应用定义信息;
所述插件接口中定义有一个基本模型类对象;实现插件接口的插件实现类必须实现此基本模型类对象;此基本模型类对象记录了实现此接口的插件实现类所服务的基本模型类对象;
所述基本模型类可实现插件支持接口;插件支持接口中具有一个插件适配器类对象;所述插件适配器类具有一个基本模型类对象,此基本模型类对象记录了此适配器类所属的基本模型对象;所述插件适配器类具有一个可管理多个插件的插件接口列表,所述插件是插件实现类运行后的内存表现形式;所述插件接口列表中可以记录对应的插件;
所述***还包括插件运行库;所述插件运行库包括插件实现类程序集;所述插件实现类程序集包括至少一个插件实现类;
所述***还包括插件运行库;所述插件运行库包括插件实现类程序集和插件装载类程序集;所述插件实现类程序集包括至少一个插件实现类,每个插件实现类用于实现相应插件的接口规范和插件功能,所述插件装载类程序集包括至少一个插件装载类,插件装载类继承于插件适配器类,每个插件装载类可根据插件应用定义信息创建插件,并将创建的插件登记在插件接口列表中;
所述基本模型类通过插件接口列表管理多个插件;
所述模型设计工具还用于设计插件运行库及插件模型数据存储单元中的程序集定义信息、程序类定义信息、插件定义信息和插件应用数据存储单元中的插件应用定义信息。
4.根据权利要求3所述的应用插件扩充模型驱动开发能力的***,其特征在于:
所述基本模型数据存储单元用于存储基本模型的数据,所述基本模型的数据包括界面定义信息和实体定义信息,所述界面定义信息包括控件定义信息和菜单定义信息,所述实体定义信息包括业务表定义信息和业务功能定义信息,所述业务表定义信息包括字段定义信息,所述字段定义信息包括业务元素定义信息;
所述业务数据存储单元是存储业务数据的数据库或文件;
所述模型运行引擎可实现以下功能:
1]从基本模型数据存储单元中读取实体定义信息和界面定义信息;根据实体类生成实体类对象,根据界面类生成界面类对象;所述界面类对象的屏幕表现就是操作界面;所述界面类对象表现的数据就是实体类对象的数据;
2]根据用户操作将业务数据存储单元中的业务数据读取至实体类对象中供用户通过操作界面查看;
3]根据用户操作将实体类对象的数据保存到业务数据存储单元中;
4]根据已生成的实体类对象和界面类对象读取插件应用定义信息中所对应的插件定义信息,并根据该插件定义信息调用所对应的插件实现类生成插件实现类对象,并使插件实现类对象和实体对象及界面类对象关联以控制实体对象和界面对象。
5.一种应用插件扩充模型驱动开发能力的方法,其特征在于:包括以下步骤:
(1)根据需求分析,模型设计工具建立模型运行引擎据以运行的实体定义信息和界面定义信息并存储在基本模型数据存储单元中;
(2)模型设计工具根据所建立的相关信息定义相应的业务数据结构,并存储到业务数据存储单元中;
(3)根据需求分析,模型设计工具建立插件模型的数据,并存储在插件模型数据存储单元中;
(4)根据上述插件定义信息,模型设计工具编写相应的插件实现类代码,并编译生成插件实现类程序集;
(5)使用模型设计工具定义与基本模型对应的插件应用定义信息,并存储到插件应用数据存储单元中;
(6)使用模型运行引擎运行基本模型和插件模型。
6.根据权利要求5所述应用插件扩充模型驱动开发能力的方法,其特征在于:
所述步骤1的具体步骤如下:
1.1模型设计工具建立业务元素定义信息;
1.2模型设计工具引用业务元素定义信息建立业务表定义信息;
1.3模型设计工具引用业务表定义信息建立实体定义信息;
1.4模型设计工具引用实体定义信息建立界面定义信息;
1.5将上述信息存储到基本模型数据存储单元中;
所述步骤2的具体步骤如下:
模型设计工具根据业务表定义信息定义业务数据结构,并生成业务数据存储单元中的业务数据结构;
步骤3的具体步骤如下:
3.1模型设计工具建立程序集定义信息;
3.2模型设计工具建立程序类定义信息,并指定其中的程序类所属的程序集;
3.3模型设计工具建立插件定义信息,并指定其中实现插件功能的程序类;
3.4将上述信息存储到插件模型数据存储单元中;
所述步骤4的具体步骤如下:
4.1根据插件定义信息,模型设计工具生成一个插件实现类代码框架;
4.2模型设计工具根据插件实现类代码框架编写插件实现类代码;
4.3模型设计工具根据插件实现类代码编译并生成插件实现类程序集;
步骤5的具体步骤如下:
模型设计工具引用基本模型定义信息和插件模型定义信息,定义与基本模型对应的插件应用定义信息,并存储到插件应用数据存储单元中;
步骤6的具体步骤如下:
6.1创建基本模型对象及其子对象,模型运行引擎从基本模型数据存储单元中读取实体定义信息和界面定义信息,根据实体类生成实体类对象,根据界面类生成界面类对象;
6.2创建基本模型类对象的插件,根据已生成的基本模型类对象,读取插件应用数据存储单元中相应的插件应用定义信息,根据插件应用定义信息读取插件模型数据存储单元中的程序集定义信息和程序类定义信息,根据程序集定义信息中的程序集名称调用对应程序集中的程序类创建插件实现类对象;并将所创建的插件实现类对象记录在基本模型类对象的插件适配器类对象中;
6.3建立基本模型类对象和插件实现类对象的关联,将插件实现类对象记录在插件适配器类对象后,调用基本模型对象及其子对象的插件启用方法建立插件实现类相应方法与基本模型类对象及其子对象事件的关联,此插件启用方法中设置插件适配器类对象中的各插件实现类对象的激活属性,此激活属性会在激活时建立基本模型类对象及其子对象的事件与插件实现类对象中相应方法的关联,此激活属性会在禁用时断开基本模型类对象及其子对象的事件与插件实现类对象中相应方法的关联;
6.4运行过程中,插件实现类对象响应基本模型类对象及其子对象的事件并执行相应方法完成插件功能;
6.5基本模型类对象及其子对象在销毁前先断开其事件与插件实现类对象相应方法的联系,并销毁插件实现类对象;
6.6销毁基本模型类对象及其子对象;
7.一种应用插件扩充模型驱动开发能力的方法,其特征在于:包括以下步骤:
(1)根据需求分析,模型设计工具建立模型运行引擎据以运行的实体定义信息和界面定义信息并存储在基本模型数据存储单元中;
(2)模型设计工具根据所建立的相关信息定义相应的业务数据结构,并存储到业务数据存储单元中;
(3)根据需求分析,模型设计工具建立插件模型的数据,并存储在插件模型数据存储单元中;
(4)根据上述插件定义信息,模型设计工具编写相应的插件实现类代码,并编译生成插件实现类程序集;
(5)使用模型设计工具定义与基本模型对应的插件应用定义信息,并存储到插件应用数据存储单元中,同时生成相应的插件装载类代码,并将其存储到程序类定义信息的程序类代码项中,并且把生成的插件装载类代码编译并合并到插件装载类程序集中;
(6)使用模型运行引擎运行基本模型和插件模型。
8.根据权利要求7所述应用插件扩充模型驱动开发能力的方法,其特征在于:
所述步骤1的具体步骤如下:
1.1模型设计工具建立业务元素定义信息;
1.2模型设计工具引用业务元素定义信息建立业务表定义信息;
1.3模型设计工具引用业务表定义信息建立实体定义信息;
1.4模型设计工具引用实体定义信息建立界面定义信息;
1.5将上述信息存储到基本模型数据存储单元中;
所述步骤2的具体步骤如下:
模型设计工具根据业务表定义信息定义业务数据结构,并生成业务数据存储单元中的业务数据结构;
所述步骤3的具体步骤如下:
3.1模型设计工具建立程序集定义信息;
3.2模型设计工具建立程序类定义信息,并指定其中的程序类所属的程序集;
3.3模型设计工具建立插件定义信息,并指定其中实现插件功能的程序类;
3.4将上述信息存储到插件模型数据存储单元中;
所述步骤4的具体步骤如下:
4.1根据插件定义信息,模型设计工具生成一个插件实现类代码框架;
4.2模型设计工具根据插件实现类代码框架编写插件实现类代码;
4.3模型设计工具根据插件实现类代码编译并生成插件实现类程序集;
所述步骤5的具体步骤如下:
模型设计工具引用基本模型定义信息和插件模型定义信息,定义与基本模型对应的插件应用定义信息,并存储到插件应用数据存储单元中,同时生成相应的插件装载类代码,并将其存储到程序类定义信息的程序类代码项中,且把生成的插件装载类代码编译并合并到插件装载类程序集中;
所述步骤6的具体步骤如下:
6.1创建基本模型类对象及其子对象,模型运行引擎从基本模型数据存储单元中读取实体定义信息和界面定义信息,根据实体类生成实体类对象,根据界面类生成界面类对象;
6.2创建基本模型类对象的插件,根据已生成的基本模型类对象,读取插件应用数据存储单元中相应的插件应用定义信息,根据插件应用定义信息读取插件模型数据存储单元中的程序集定义信息和程序类定义信息,根据程序集定义信息中的程序集名称调用插件装载类程序集中的插件装载类相应装载方法创建插件实现类对象;并将插件实现类对象记录到基本模型类对象的插件适配器类对象中的插件接口列表中;
6.3建立基本模型类对象和插件的关联,将插件登记在插件适配器类对象的插件接口列表后,调用基本模型类对象及其子对象的插件启用方法建立插件实现类对象相应方法与基本模型类对象及其子对象事件的关联,此插件启用方法中设置插件适配器类对象的插件接口列表中所记录的各插件实现类对象的激活属性,此激活属性会在激活时建立基本模型类对象及其子对象的事件与插件实现类对象中相应方法的关联,此激活属性会在禁用时断开基本模型类对象及其子对象的事件与插件实现类对象中相应方法的关联;
6.4运行中,插件实现类对象响应基本模型类对象及其子对象的事件并执行相应方法完成插件功能;
6.5基本模型类对象销毁前先断开其事件与插件实现类对象相应方法的联系,并销毁插件实现类对象;
6.6销毁基本模型类对象及其子对象。
CN 201010285102 2010-09-02 2010-09-17 一种应用插件扩充模型驱动开发能力的***及其方法 Active CN102033743B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201010285102 CN102033743B (zh) 2010-09-02 2010-09-17 一种应用插件扩充模型驱动开发能力的***及其方法

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN201010270884 2010-09-02
CN201010270884.4 2010-09-02
CN 201010285102 CN102033743B (zh) 2010-09-02 2010-09-17 一种应用插件扩充模型驱动开发能力的***及其方法

Publications (2)

Publication Number Publication Date
CN102033743A true CN102033743A (zh) 2011-04-27
CN102033743B CN102033743B (zh) 2013-03-20

Family

ID=43886683

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201010285102 Active CN102033743B (zh) 2010-09-02 2010-09-17 一种应用插件扩充模型驱动开发能力的***及其方法

Country Status (1)

Country Link
CN (1) CN102033743B (zh)

Cited By (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103176795A (zh) * 2013-02-04 2013-06-26 中国电子科技集团公司第二十八研究所 一种基于插件技术在信息分发软件数据过滤中的应用方法
CN103197932A (zh) * 2013-04-19 2013-07-10 济南大学 一种开发无模式文档型数据库应用的业务组件模型
CN103442349A (zh) * 2013-08-22 2013-12-11 重庆邮电大学 基于xmpp的无线传感器网络固件更新方法
CN103793346A (zh) * 2012-10-29 2014-05-14 洛克威尔自动控制技术股份有限公司 可链接插件
CN103914307A (zh) * 2014-04-22 2014-07-09 浪潮电子信息产业股份有限公司 一种基于可复用库的交互界面快速实现方法
CN103927168A (zh) * 2014-04-02 2014-07-16 北京中交兴路车联网科技有限公司 一种面向对象的数据模型持久化的方法及装置
WO2014114253A1 (en) * 2013-01-24 2014-07-31 Tencent Technology (Shenzhen) Company Limited Methods and systems for creating data applications
CN105183458A (zh) * 2015-08-14 2015-12-23 深圳联友科技有限公司 一种软件平台开发方法及装置
CN106415548A (zh) * 2014-04-25 2017-02-15 塔塔咨询服务公司 一种用于产品、材料和制造流程集成设计的模型驱动的计算平台
CN106445818A (zh) * 2016-09-13 2017-02-22 郑州云海信息技术有限公司 一种基于模型驱动的自动化脚本调试方法和装置
CN106528304A (zh) * 2016-10-31 2017-03-22 努比亚技术有限公司 一种分享适配器及其配置方法、调用方法和装置及移动终端
US9606521B2 (en) 2011-11-11 2017-03-28 Rockwell Automation Technologies, Inc. Chainable plug-ins
CN106681718A (zh) * 2016-12-16 2017-05-17 武汉中地数码科技有限公司 一种基于工具集的桌面端插件框架及实现方法
CN108628599A (zh) * 2018-05-03 2018-10-09 山东浪潮通软信息科技有限公司 一种适配接口服务的方法、装置及***
CN109062569A (zh) * 2018-08-08 2018-12-21 中国民用航空飞行学院 虚拟事件模拟条件下多元化驱动引擎构建方法
CN109286675A (zh) * 2018-10-15 2019-01-29 上海赛治信息技术有限公司 Fc-ae-asm网络数据通讯方法及***
CN109542043A (zh) * 2018-10-31 2019-03-29 武汉华中数控股份有限公司 一种基于插件的数控***管理方法及装置
CN109933335A (zh) * 2019-03-18 2019-06-25 山东浪潮通软信息科技有限公司 一种混合开发模式下增删功能特性的插件方法
WO2019179067A1 (zh) * 2018-03-18 2019-09-26 平安科技(深圳)有限公司 业务逻辑的处理方法、***、计算机设备和存储介质
CN111984257A (zh) * 2020-06-29 2020-11-24 山东浪潮通软信息科技有限公司 一种实体建模定制化扩展方法及装置
CN112506529A (zh) * 2020-11-26 2021-03-16 杭州讯酷科技有限公司 一种使用插件快速构建兼容***的方法
CN113391852A (zh) * 2021-06-07 2021-09-14 广州通达汽车电气股份有限公司 一种平台软件扩展方法及装置
CN114489853A (zh) * 2022-01-21 2022-05-13 阿里巴巴(中国)有限公司 插件注册方法、电子设备及计算机可读存储介质
CN114691129A (zh) * 2020-12-31 2022-07-01 上海维略信息科技有限公司 一种基于设计模型面向低代码开发平台的自动化开发方法
CN114968406A (zh) * 2022-05-27 2022-08-30 北京青云科技股份有限公司 一种插件管理方法、装置、电子设备及存储介质
CN115373657A (zh) * 2022-06-30 2022-11-22 北京三维天地科技股份有限公司 一种基于模型驱动的自动构建应用的方法
US11824715B2 (en) 2019-10-28 2023-11-21 Huawei Technologies Co., Ltd. Configuration method, related apparatus, and system

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1731351A (zh) * 2005-08-26 2006-02-08 南京邮电大学 一种用于网格计算的模型驱动方法
CN101477462A (zh) * 2009-02-12 2009-07-08 山东浪潮齐鲁软件产业股份有限公司 一种用于动态改变***行为的模型驱动软件开发方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1731351A (zh) * 2005-08-26 2006-02-08 南京邮电大学 一种用于网格计算的模型驱动方法
CN101477462A (zh) * 2009-02-12 2009-07-08 山东浪潮齐鲁软件产业股份有限公司 一种用于动态改变***行为的模型驱动软件开发方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
麻志毅等: "一种支持模型驱动开发的元建模平台的研制", 《电子学报》, vol. 36, no. 4, 30 April 2008 (2008-04-30) *

Cited By (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9606521B2 (en) 2011-11-11 2017-03-28 Rockwell Automation Technologies, Inc. Chainable plug-ins
CN103793346A (zh) * 2012-10-29 2014-05-14 洛克威尔自动控制技术股份有限公司 可链接插件
CN103793346B (zh) * 2012-10-29 2018-01-19 罗克韦尔自动化技术公司 自动控制***、机器可读介质及修改部件的功能的方法
WO2014114253A1 (en) * 2013-01-24 2014-07-31 Tencent Technology (Shenzhen) Company Limited Methods and systems for creating data applications
CN103176795A (zh) * 2013-02-04 2013-06-26 中国电子科技集团公司第二十八研究所 一种基于插件技术在信息分发软件数据过滤中的应用方法
CN103176795B (zh) * 2013-02-04 2016-03-02 中国电子科技集团公司第二十八研究所 一种基于插件技术在信息分发软件数据过滤中的应用方法
CN103197932B (zh) * 2013-04-19 2016-05-25 济南大学 一种开发无模式文档型数据库应用的业务组件模型
CN103197932A (zh) * 2013-04-19 2013-07-10 济南大学 一种开发无模式文档型数据库应用的业务组件模型
CN103442349A (zh) * 2013-08-22 2013-12-11 重庆邮电大学 基于xmpp的无线传感器网络固件更新方法
CN103442349B (zh) * 2013-08-22 2016-04-13 重庆邮电大学 基于xmpp的无线传感器网络固件更新方法
CN103927168A (zh) * 2014-04-02 2014-07-16 北京中交兴路车联网科技有限公司 一种面向对象的数据模型持久化的方法及装置
CN103914307A (zh) * 2014-04-22 2014-07-09 浪潮电子信息产业股份有限公司 一种基于可复用库的交互界面快速实现方法
CN106415548A (zh) * 2014-04-25 2017-02-15 塔塔咨询服务公司 一种用于产品、材料和制造流程集成设计的模型驱动的计算平台
CN106415548B (zh) * 2014-04-25 2020-03-10 塔塔咨询服务公司 一种用于产品、材料和制造流程集成设计的计算平台
CN105183458A (zh) * 2015-08-14 2015-12-23 深圳联友科技有限公司 一种软件平台开发方法及装置
CN106445818A (zh) * 2016-09-13 2017-02-22 郑州云海信息技术有限公司 一种基于模型驱动的自动化脚本调试方法和装置
CN106445818B (zh) * 2016-09-13 2019-05-10 郑州云海信息技术有限公司 一种基于模型驱动的自动化脚本调试方法和装置
CN106528304A (zh) * 2016-10-31 2017-03-22 努比亚技术有限公司 一种分享适配器及其配置方法、调用方法和装置及移动终端
CN106681718A (zh) * 2016-12-16 2017-05-17 武汉中地数码科技有限公司 一种基于工具集的桌面端插件框架及实现方法
WO2019179067A1 (zh) * 2018-03-18 2019-09-26 平安科技(深圳)有限公司 业务逻辑的处理方法、***、计算机设备和存储介质
CN108628599A (zh) * 2018-05-03 2018-10-09 山东浪潮通软信息科技有限公司 一种适配接口服务的方法、装置及***
CN109062569A (zh) * 2018-08-08 2018-12-21 中国民用航空飞行学院 虚拟事件模拟条件下多元化驱动引擎构建方法
CN109286675A (zh) * 2018-10-15 2019-01-29 上海赛治信息技术有限公司 Fc-ae-asm网络数据通讯方法及***
CN109542043A (zh) * 2018-10-31 2019-03-29 武汉华中数控股份有限公司 一种基于插件的数控***管理方法及装置
CN109933335A (zh) * 2019-03-18 2019-06-25 山东浪潮通软信息科技有限公司 一种混合开发模式下增删功能特性的插件方法
US11824715B2 (en) 2019-10-28 2023-11-21 Huawei Technologies Co., Ltd. Configuration method, related apparatus, and system
CN111984257A (zh) * 2020-06-29 2020-11-24 山东浪潮通软信息科技有限公司 一种实体建模定制化扩展方法及装置
CN111984257B (zh) * 2020-06-29 2022-07-08 浪潮通用软件有限公司 一种实体建模定制化扩展方法及装置
CN112506529A (zh) * 2020-11-26 2021-03-16 杭州讯酷科技有限公司 一种使用插件快速构建兼容***的方法
CN112506529B (zh) * 2020-11-26 2024-03-26 杭州讯酷科技有限公司 一种使用插件快速构建兼容***的方法
CN114691129A (zh) * 2020-12-31 2022-07-01 上海维略信息科技有限公司 一种基于设计模型面向低代码开发平台的自动化开发方法
CN113391852A (zh) * 2021-06-07 2021-09-14 广州通达汽车电气股份有限公司 一种平台软件扩展方法及装置
CN113391852B (zh) * 2021-06-07 2024-06-04 广州通达汽车电气股份有限公司 一种平台软件扩展方法及装置
CN114489853A (zh) * 2022-01-21 2022-05-13 阿里巴巴(中国)有限公司 插件注册方法、电子设备及计算机可读存储介质
CN114968406B (zh) * 2022-05-27 2023-10-13 北京青云科技股份有限公司 一种插件管理方法、装置、电子设备及存储介质
CN114968406A (zh) * 2022-05-27 2022-08-30 北京青云科技股份有限公司 一种插件管理方法、装置、电子设备及存储介质
CN115373657A (zh) * 2022-06-30 2022-11-22 北京三维天地科技股份有限公司 一种基于模型驱动的自动构建应用的方法

Also Published As

Publication number Publication date
CN102033743B (zh) 2013-03-20

Similar Documents

Publication Publication Date Title
CN102033743B (zh) 一种应用插件扩充模型驱动开发能力的***及其方法
CN101617292B (zh) 面向生成器图的编程和执行
CN102375731B (zh) 一种免编码集成应用软件平台***
US8340995B2 (en) Method and system of using artifacts to identify elements of a component business model
US9292306B2 (en) System, multi-tier interface and methods for management of operational structured data
US8527943B1 (en) System and method of application development
JP3592944B2 (ja) インターフェース方法、データ処理方法、プログラム作成方法、インターフェース装置、記憶媒体
US7917890B2 (en) Enterprise-scale application development framework utilizing code generation
CN106445536B (zh) 自动化业务设计管理***
Pidd et al. Simulation software: not the same yesterday, today or forever
CN101996078B (zh) 使用基于事件的遗留应用进行的集成***组合建模
WO2015196784A1 (zh) 一种基于软件元视图以构造软件视图的可视软件建模方法
US20080250071A1 (en) Systems and methods for business applications
WO2015196783A1 (zh) 一种基于软件元模型以构造软件模型的通用软件建模方法
TW521210B (en) Modular computer system and related method
US20090172696A1 (en) Service-based content management
Benouda et al. MDA approach to automate code generation for mobile applications
Burgueño et al. On the concurrent execution of model transformations with linda
CN115202639A (zh) 基于自定义模块的代码生成方法、装置、设备及存储介质
Peroni et al. Interfacing fast-fashion design industries with Semantic Web technologies: The case of Imperial Fashion
Roszczyk et al. BalticLSC: A low-code HPC platform for small and medium research teams
CN105224298B (zh) 一种基于界面元模型构造界面模型的通用界面建模方法
Vion Software asset management and cloud computing
CN101582027B (zh) 基于形式领域融合的计算模型
CN112612481A (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
C14 Grant of patent or utility model
GR01 Patent grant
C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20151204

Address after: 510623, No. 26, Huaxia Road, Guangzhou, Guangdong, 9, Tianhe District

Patentee after: Guangzhou wing Feng Communication Technology Co., Ltd.

Address before: 710119, building 10, H District, Ziwei Garden City, new industrial park, hi tech Zone, Shaanxi, Xi'an

Patentee before: Xi'an Saifei Software Technology Co., Ltd.

CP03 Change of name, title or address

Address after: 510623 Room 904, Huaqiang Road, Tianhe District, Guangzhou City, Guangdong Province

Patentee after: Guangzhou wing wind information Polytron Technologies Inc

Address before: 510623 9 Floor, 26 Huaxia Road, Tianhe District, Guangzhou City, Guangdong Province

Patentee before: Guangzhou wing Feng Communication Technology Co., Ltd.

CP03 Change of name, title or address