一种集成的支持元建模的开发和运行系统的制作方法

文档序号:17772126发布日期:2019-05-28 19:33阅读:197来源:国知局
一种集成的支持元建模的开发和运行系统的制作方法

本发明属于软件应用技术领域,尤其涉及一种集成的支持元建模的开发和运行系统。



背景技术:

目前,业内常用的现有技术是这样的:

软件系统,尤其是企业级信息系统正面对日益增长的复杂性,以及不断改变的客户需求,使得软件系统必须快速演化,但是需求经常改变的比实现更快。使用当前以代码为中心的技术开发这些软件系统需要巨大的努力。当代有一些关键的软件系统通常希望能够在执行环境中安全的适应更改,这些承担了关键作用的软件,它必须24/7保持可用状态,而且需要持续适应环境条件与需求的变化。模型驱动的工程(mde)是一种如软件开发方法,聚焦于系统多个方面的领域模型的创建和利用,通过从问题级别的抽象到软件实现系统性的自动地转换,来减少复杂性,以及减少问题与实现域的鸿沟。然而,mde是典型的生成式方法,主要聚焦于在开发阶段使用模型。由于从模型生成代码,编译代码,停止已有系统,安装和配置新系统,及启动系统导致的延迟,在开发环境中花费了大量的时间,所以mde无法在运行时适应变化。

运行时的模型能够实现高适应性的应用程序。运行时模型定义了运行中的系统的某个方面的抽象,为特别的目的允许在运行时被操作。为了提供有效的技术管理软件复杂性,应对在运行中进化的软件结构和行为,将模型的适用性扩展到运行环境是必要的。不同模型互相连接,以一种持续映射系统和其状态和行为的方式表达系统。如果系统改变,系统的表达—模型,也相应的改变,反之亦然。

目前,尽管许多分析和实践获得了许多运行时模型的成果,但是仍然没有形成一种系统性的方法,支持广泛的工业应用。目前的运行时模型方法很少有方法聚焦于开发通用的运行时模型的相关框架。开发者很少有用运行时模型实现整个系统。它们的大多数被设计应用于特定的领域满足特定的需求,作为要实现系统的一部分。另外这些方法提供的建模语言、建模工具和模型解释器通常是硬编码的、预定义的和不可运行时扩展的,限制了灵活性和扩展性。在集成的开发及运行环境中,提供一种设施在更高抽象层次用于创建和操作运行时模型的定义,dsmls是必要的。

综上所述,现有技术存在的问题是:

(1)现有技术中,大部分是依据少数客户的项目需求定制开发而成,没有形成一种系统性的方法,支持广泛的工业应用;

(2)目前的运行时模型方法,很少有方法聚焦于开发通用的运行时模型的相关框架,因为缺少真正意义上良好规划和架构设计的平台引擎,无法形成所有客户能够共享的核心资产,并进行持续改进。每个项目基于已有类似项目代码修改,形成了不同客户的分支代码,不同项目代码经常互相移植,以实现重用,这导致产品管理混乱,难以实现运行时演化。;

(3)开发者很少有用运行时模型实现整个系统;它们的大多数被设计应用于特定的领域满足特定的需求,作为要实现系统的一部分;另外这些方法提供的建模语言、建模工具和模型解释器通常是硬编码的、预定义的和不可运行时扩展的,限制了灵活性和扩展性,往往需要离线进行进一步的设计和编码实现,即使细微的修改都需要重新编译、关闭系统、升级系统、重启系统,不利于快速满足客户需求,也增加了成本和失败风险。

解决上述技术问题的难度和意义:

常规的研究方法聚焦于如何对已有的组件进行重构,而难以支持运行期对组件自身的可变性,也不支持可变机制自身的可变性;一些模型驱动的方法更多的使用生成式方法,难以支持运行时的可变性,而基于运行时模型的方法虽支持运行时修改模型,但其建模能力是固定的,不支持运行时修改;最难的在于运行时元建模集成到建模环境及运行环境中去。解决这些问题将能针对大型企业快速构建个性化软件系统,加快开发周期,降低开发成本,并允许系统在运行过程中进行定制,定制完成系统不用重启,直接生效,能持续、快速满足不断变化的客户需求,减少停机次数和时间。



技术实现要素:

针对现有技术存在的问题,本发明提供了一种集成的支持元建模的开发和运行系统。

本发明是这样实现的,一种集成的支持元建模的开发和运行系统包括:

元建模工作台模块、建模环境模块、软件系统的使用模块、用于分享和重用dsmls、模型和组件模块;

元建模工作台模块,包含元建模环境用于扩展已有的建模语言,或定义新的建模语言,包括它们的语法、建模工具和语义解释器。语法被表达为元模型,该元模型被一个通用的元建模语言(meta-modelinglanguage)描述。已有的运行时模型方法限制他们与应用一个固定集合的建模语言。提供一个元建模环境,用于扩展已有的建模语言,或定义新的dsmls;

建模环境模块,提供一个集成的建模环境,使用一组建模语言定义模型;这些模型被元模型或建模语言描述,从不同的方面提供了软件系统的抽象表达。一旦在元建模工作台定义了一个建模语言,甚至该建模语言的部分原型,你可以直接在建模环境中使用该语言,而不需要重启系统,这在运行时提供了模型和建模语言并行演化的能力。

软件系统的使用模块,可以从数据库中检索模型,借助建模语言提供的模型解释器,直接解释或执行模型。结果表明,软件系统的所有方面,包括数据的读取和保存,应用访问控制规则,生成用户界面和显示内容,响应用户的交互,执行业务逻辑,监控运行系统和环境的状态,推理和应用变更等都可以用模型表达。当运行时模型或建模原因的更改时,系统结构和行为将实时更改。;

用于分享和重用dsmls、模型和组件模块,用于分享和重用dsmls、模型和组件的库创建世界范围或特定范围内的内容生态系统;可发现性和重用,版本管理,影响分析,以及了解组件、模型、dsmls如何被使用。

进一步,定义新的dsmls包括新的dsmls的语法、建模工具以及语义解释器。

进一步,语法被表达为元模型,元模型被公共的元建模语言描述。

进一步,模型由meta-model或建模语言描述,从不同的视角提供了一个软件系统的抽象表达。

进一步,用户的需求模型包括生成和显示图形用户界面、发送信息到领域层、执行业务逻辑、保存数据到数据库。

综上所述,本发明的优点及积极效果为:

本发明将所有不同抽象层次的数据保存在一个统一的数据库中有很多好处,有利于实现不同抽象层次的数据的参照完整性;有利于为不同抽象层次的数据提供一个统一的对象持久化映射机制。

本发明提供一种更系统的方法,通过添加元建模能力到一个集成的开发和运行环境,提供了一种新的架构风格。开发了集成的支持元建模的开发和运行平台,验证了此方法的巨大能力。基于集成的支持元建模的开发和运行平台,可以创建大型企业级信息系统,在运行时通过浏览器定义dsmls(domain-specificmodelinglanguages,领域相关建模语言)和创建模型,这些更改被动态的反射生效,不需要重新生成和重启,交付一个通用的,基于web的、可执行的和可持续演化的最终系统的原型。

附图说明

图1是本发明实施例提供的集成的支持元建模的开发和运行系统框图。

图2是本发明实施例提供的支持元建模的集成开发与运行环境的基本原理图。

图3是本发明实施例提供的架构与行为模型的语义结构流程图。

图4是本发明实施例提供的架构风格的内部实现原理图。

图5是本发明实施例提供的统一的结构表达4个抽象层次的对象示意图。

图6是本发明实施例提供的统一的行为元模型示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

下面结合附图对本发明的应用原理作详细描述;

如图1所示,本发明实施例提供的集成的支持元建模的开发和运行系统包括:

元建模工作台模块1、建模环境模块2、软件系统的使用模块3、用于分享和重用dsmls、模型和组件模块4;

元建模工作台模块1,提供一个元建模环境,用于扩展已有的建模语言,或定义新的dsmls;

建模环境模块2,提供一个集成的建模环境,使用一组建模语言定义模型;

软件系统的使用模块3,系统从数据库中读取模型,通过相应的模型解释器直接解释和执行反射用户的需求的模型;

用于分享和重用dsmls、模型和组件模块4,用于分享和重用dsmls、模型和组件的库创建世界范围或特定范围内的内容生态系统;可发现性和重用,版本管理,影响分析,以及了解组件、模型、dsmls如何被使用。

本发明实施例提供的定义新的dsmls包括新的dsmls的语法、建模工具以及语义解释器。

本发明实施例提供的语法被表达为元模型,元模型被公共的元建模语言描述。

本发明实施例提供的模型由meta-model或建模语言描述,从不同的视角提供了一个软件系统的抽象表达。

本发明实施例提供的用户的需求模型包括生成和显示图形用户界面、发送信息到领域层、执行业务逻辑、保存数据到数据库。

如图2所示,本发明实施例提供的支持元建模的集成开发与运行环境的基本原理图。

集成的支持元建模的开发和运行平台基于web的开发和运行环境,通过web浏览器可以在任何地点、任何时间定义dsmls以及相关的dsmls和使用系统。一个系统的所有信息保存在一个数据库中,这些信息包括业务数据、模型定义、dsmls定义以及自描述的元元模型。因此,在一个运行的系统中修改模型和dsmls能够动态的反射。系统的执行直接基于保持在数据库中的最新的系统定义信息。开发过程与运行过程没有清晰的边界。对于用户而言,集成的支持元建模的开发和运行平台成为一个基于web的特定应用领域的定义设施,交付了一个通用的,可执行的,基于web的和进化的最终应用的原型。

下面结合具体实施例对本发明的应用原理进行进一步说明;

实施例1;元建模工作台

建模语言分为通用建模语言和领域相关建模语言。通用建模语言由于广泛的适应性,通常比较复杂,不容易学习和使用。领域相关建模语言(domain-specificmodelinglanguages,dsmls)也被称为微语言和小语言,聚焦于特定的问题领域,提供了问题相关的高层次的抽象,通常非常简单,容易学习和使用。dsmls使得软件开发效率显著提升,而且非常适合领域专家和最终用户使用,填补了问题域与实现域的鸿沟。

为了使得开发流程真正具有适应性,不是简单的一个案例使得支持一些预定义的建模语言。如果开发流程限定于应用一个固定集合的建模语言,那么它将必然限制问题域的范围和其所能提供的潜在解决方案。因此需要一个元建模工作台,使用一种统一的和语义丰富的方式,用于捕获,描述和操作领域建模语言的所有方面。元元模型是元建模的关键,因为它使得所有的建模语言使用一种统一的方式描述。

集成的支持元建模的开发和运行平台提供了一个基于web的元建模工作台,支持元建模设施的关键需求,用于操作元模型,包括扩展已有的dsmls或新的dsmls的能力。通过使用一个标准的面向对象的建模概念,集成的支持元建模的开发和运行平台提供了一个小的,但是表达能力强的,平台无关的语言用于元建模。允许定义领域建模语言相关的概念、它们的属性、概念之间的关系、关联的规则,以及元操作。dsmls以元模型(meta-model)形式保存到元模型库中。通过反射dsml的定义,集成的支持元建模的开发和运行平台可以自动生成sql脚本,创建表结构用于保存符合dsmls定义的models信息。

通常,表达模型的良好定义的规则是必要的。ocl(objectconstraintlanguage,对象约束语言)是一个静态语言,而且不能更改所指向的对象的状态。然而,这中限制使得很难描述能够被执行的操作性的语义。作为替代,集成的支持元建模的开发和运行平台使用了c#,一种强大的命令式语言来编写形式良好的规则,规则保存在数据库中,集成了一个c#脚本引擎,使用ruleobject模式来执行这些规则。

许多语言有一种图形语法,而且通过一个建模工具支持。每种dsml都需要一个工具用于定义模型,所以定义建模工具的定义是建模语言的定义的一部分。通过反射元模型的定义meta-model,可以生成建模工具的视图模型,然后可以对该视图模型进行修改,通过定制建模工具的外观和行为。例如反射有限状态机的元模型,只能生成基于表单和表格的有限状态机建模工具。为了更直观地创建有限状态机模型,集成的支持元建模的开发和运行平台允许通过扩展点机制定义基于图的状态机建模工具。

传统的元建模工具定义生成器将模型转换为其他模型或代码,而需要定义模型解释器直接执行模型。对于一种可执行的dsml,定义操作语义是非常重要的,目的是更清晰的表达建模语言的表示和含义。在集成的支持元建模的开发和运行平台中,根类object提供了一组预定义的operations,例如create、delete、getproperty,setproperty,instanceof,load和save。基于c#或javascript的在线脚本编辑器为建模语言的相关概念添加operations,并实现操作语义。一个dsml语义能够成功的被一个元模型捕获。关键的好处是其语义成为该dsml定义的一个集成的部分,能够在运行时修改。

集成的支持元建模的开发和运行平台元建模环境实现了元对象设施(completemetaobjectfacility,cmof)标准定义的绝大部分功能,采用了closingtheroof模式,集成的支持元建模的开发和运行平台的元元模型被设计为自描述的。集成的支持元建模的开发和运行平台元建模工作台作为面向对象的建模环境,不但可以用于定义面向对象的元模型,同样也可以用于定义面向对象的模型,类似的元对象设施(metaobjectfacility,mof)与统一建模语言(unifiedmodelinglanguage,uml)共用了一个对象模型的子集。

当装载一个建模语言的元模型到一个基于集成的支持元建模的开发和运行平台的应用程序,该程序定义了这个建模语言的各个方面,该程序将能理解该建模语言相关的模型的所有内容,包括模型的表达和模型的存储,用户的交互和创建模型,以及如何执行语义丰富的模型。避免一种”one-language-does-all”方法,使用一组领域相关建模语言(dsmls)表达关注的方面。任何数量的建模语言能够被用同样的方式加载,使得能够用于构建语义丰富的开发和运行环境,因为所有的建模语言用同样的方式定义。

在集成的支持元建模的开发和运行平台中,可以通过在运行时扩展已有建模语言,或创建新的领域相关建模语言,对建模语言,建模工具和模型解释器的最后的修改实时对所有用户生效,而不需要在使生效前编译建模语言。一个语义丰富的,可演化的建模语言的集成架构对工业能够提供巨大的产能提升。通过集成元建模能力到开发和运行环境,系统的扩展性和灵活性将显著提升,不受限制于固定的预定义的建模能力。抽象的级别从可执行模型提升到可演化的建模语言,所以提供了更好的运行时适应性。

实施例2;建模环境

通过使用元建模,生产率显著提升,因为领域专家能够使用能理解的建模语言表达,而且问题空间和方案空间都是全面开放的,使用这种方式开发的制品将更加敏捷,可扩展和可集成。这种方法提供了一种范式,超越了面向对象的编程以及建模,在降低成本和提升开发效率方面对工业有重大影响。

通过使用集成的支持元建模的开发和运行平台中的建模环境,领域专家和最终用户能够立刻开始设计模型,使用图形,表单或表格,在不同视图切换。用户能够使用层次视图浏览模型,应用组件,连接模型到其他模型,使用预定义的和自定义的规则检查模型。这些模型捕获了系统不同方面的关注点。技术专家进一步精化模型,例如添加语义丰富的行为。它们能够从数据库中检索,被解释执行用于动态地驱动系统的数据库,业务逻辑和用户界面。对模型的修改将立刻对所有的用户生效。

提供一个强大的命令式语言设计器用于定义系统的可执行语义是非常必要的。一个基于web的c#脚本编辑器,vscode被集成到集成的支持元建模的开发和运行平台中,用以定义可执行的规则和操作。源代码被认为是一种模型,表达了系统执行时的动态行为。它们能够在运行时修改,作为元数据形式保存在数据库中,而且它们能够被检索和被一个c#执行引擎(cs-script)在运行时执行。这个c#执行引擎不仅用于定义模型的行为,也用于定义建模语言和元建模语言的行为。

抽象被用于作为一种应对复杂性的手段已经很长一段时间。将一个系统的描述分割成一系列模型提供了一种强有力的机制,获得了需要的抽象级别、简单性以及模块化。一个模型表达了整个系统某个方面的关注点,每个模型聚焦于特定关注点的相关的对象,去掉所有不相关的细节。模型的结构和语义通过更高层的建模语言描述。一个元元模型提供了一种统一的描述机制,用于实现建模语言的组合,也用于实现相关的模型的组合。

如图3所示,本发明实施例提供的架构与行为模型的语义结构流程图。

集成的支持元建模的开发和运行平台内置了部分通用建模能力,类似uml的类图、状态图、活动图,也内置了部分企业信息系统开发常见的建模能力,比如组织结构建模、权限建模、菜单建模、门户建模等。结构模型表达了系统的对象的静态结构,行为模型表达了系统中对象的动态行为。多种模型在一个系统中将共存用于捕获不同的关注点。

集成的支持元建模的开发和运行平台主要提供了如下预定义的结构相关的建模能力:

类建模;类似uml的类图建模,它描述系统的静态结构,通过定义类、属性、多个元层的类之间的关联等静态结构。集成的支持元建模的开发和运行平台支持自动驱动生成相应的数据库结构,以保存定义的类的实例。这些类能用于表达模型、建模语言和元建模语言的不同抽象层次的概念。

组织建模:为大型组织而设计,组织建模允许定义企业应用复杂的组织层级、组织职能,以及协同关系、职务、雇员、任职等。对于企业信息系统,组织模型是实现可控的数据隔离和分布式权限控制的基础。

对象视图建模:提供了一个基于web所见即所得的设计器,用于描述多个属性呈现的协作,用以为单个对象呈现更复杂的用户界面片段。输出可以是用户界面的一部分,也可以是整个屏幕。一个对象包含一个或多个需要被呈现的属性,也允许一个对象有多个视图。objectview被称为entityview。

对象组视图建模:集成的支持元建模的开发和运行平台提供了一个工具用于创建视图模型,该视图模型处理一组对象,生成列表风格的ui组件。一个entity-groupview能够包含复杂的布局逻辑。布局以及相关的逻辑允许在运行时动态的设置和修改。对于相同集合的对象,允许存在多个不同的视图,可以在运行时动态的连接。object-groupview也被称为entity-groupview。

主菜单建模:在企业管理信息系统中,主菜单通常是层次结构组织的,允许沿着菜单结构的不同层次展开。菜单为访问各种功能提供了便利。集成的支持元建模的开发和运行平台提供了一个工具用于定制主菜单模型,该模型包含层次结构,关联的访问控制规则,以及菜单被点击以后的各种模型表达的行为。

门户建模:一个门户小组建是一个嵌入式的图形、表格或其他数据的可视化,可以用于一个或多个门户页面。通过使用门户设计器,门户小组件可以被拖放和组织到一个门户页面上想要的位置。门户小组件的布局配置是一个门户视图模型。通过从数据库中检索门户视图模型以及相关的小组件,小组件由小组件渲染器生成ui片段,然后这些片段由门户渲染引擎组合成一个网页。

报表建模:对于企业信息系统来说,提供一个工具用于分析数据,以及帮助管理者在优化业务流程过程中获得更多的洞察力是非常重要的。集成的支持元建模的开发和运行平台集成了一个给予web的报表设计器用于创建报表,一个报表引擎用于处理数据和生成报表,一个基于web的报表浏览器显示可视化数据。报表模板作为报表模型一部分保存在数据库中。

仪表板建模:在企业信息系统中,数字仪表板通常提供了当前状态和kpis(keyperformanceindicators,关键绩效指标)的历史趋势的概览的视图。平台提供了一个仪表板小组件设计器用于设计小组件,以及一个仪表板布局设计器,用于在仪表板的显示区域组织、管理和呈现小组件。通过检索数据库中仪表盘和相关的小组件的配置,仪表板浏览器动态的显示仪表板。

集成的支持元建模的开发和运行平台提供了如下预定义的行为相关的建模能力:

操作建模:通过使用strategy模式,集成的支持元建模的开发和运行平台提供了一种关键的扩展机制,允许为已有的类添加操作和实现,这些操作可以被调用和执行。一个操作的定义包括它的操作名称,它的参数,返回参数。使用一个脚本编辑器,操作可以被实现为脚本,操作可以被内置的脚本引擎执行。操作的定义作为数据保存,容易在运行时被修改或者被重定义。

扩展点建模:集成的支持元建模的开发和运行平台提供了一种扩展点(插件)机制,允许通过反射数据库中的配置和脚本,发现和使用扩展(插件)。这些脚本实现了这些扩展使得可以创建扩展性更好的软件系统。对于一个扩展点,可以创建一个或多个扩展,在一个脚本编辑器中编写和调试脚本。当扩展点被调用时,这些脚本能够被脚本执行引擎动态的组合和执行。

有限状态机(fsm)建模:fsms广泛应用于对系统的行为进行建模。集成的支持元建模的开发和运行平台提供了一个图形化的设计器,用于建立fsms。通过扩展点机制,允许在进入,处理或离开一个状态时执行一些操作。类似的,也可以定义在流程从一个状态转移到另一个状态时发生什么。

顺序工作流建模:一个顺序工作流按顺序一个接一个执行一组活动。集成的支持元建模的开发和运行平台提供一个图形化的顺序工作流设计器,一个工作流引擎以及一个工作流监控器。活动时顺序工作流的元素。集成的支持元建模的开发和运行平台提供了一个标准活动库,而且提供了机制允许创建自己的活动,可以定义活动的设计时和运行时的行为。这实现了扩展性以及工作流之间重用。

rbac(role-basedaccesscontrol,基于角色的权限控制)modeling:rbac能够用于实现具有成千上万的用户和成千上万的权限的大型组织的安全管理。集成的支持元建模的开发和运行平台允许扩展rbac模型,创建自己的权限,角色,用户,操作,范围,政策以及它们的分配。基于前面提到的分布式组织模型,集成的支持元建模的开发和运行平台已经实现了分布式协同环境下的基于rbac的访问控制。

过滤器建模:一个过滤器是一个检索条件的抽象,用于从数据库中查询特定类型的对象。集成的支持元建模的开发和运行平台提供了一个工具使得定义这样的过滤器更加容易。可以组合已有的过滤器,创建更复杂的过滤器。一个系统可以从数据库中查询数据,基于不同的需求使用不同的过滤器。过滤器通常与其他模型结合起来使用,例如object-group视图模型。

以上这些建模能力是集成的支持元建模的开发和运行平台内置的建模能力。这些能力形成了一个通用用途的建模语言家族用于开发企业级管理信息系统。集成的支持元建模的开发和运行平台允许扩展已有的建模语言,或定义新的更接近的领域的dsmls。基于这些建模语言,允许对系统从不同的视角进行建模,这些模型相互关联,形成了对整个系统的完整描述。

集成的支持元建模的开发和运行平台提供了一个浏览器显示要给层次结构。可以展开这些结构显示详情,例如命名空间、类、属性、操作、参数、子类、扩展点、扩展、关联、对象视图、对象集视图、有限状态机、状态、转换、顺序工作流、活动、过滤器等等。对于大型系统,这个层次视图对于保持系统的清晰的模型结构是非常重要的。

领域级别的抽象以及分离关注点帮助应对日益增长的复杂性。模型的多样性应对应用领域,客户需求和环境的多样性。运行时演化的模型和反射式架构帮助应对快速变更的需求和运行时适应性。集成元建模能力到运行环境进一步提升了灵活性、扩展性和运行时适应性。

实施例3;内部实现

(1)内部结构

本文提出的集成元建模的开发与运行环境支持扩展已有的建模语言和创建新的dsmls,通过建模表达需求以及对系统的使用,这是一种新的架构风格。

如图4所示,本发明实施例提供的架构风格的内部实现原理图。

metadata-basedobjectcontainer是一个核心组件,提供了一个共享的容器,用于持有运行的系统的服务器内存对象。此组件同时实现了两级缓存系统中的第一级缓存。

metadata-basedpersistenceengine是一个元数据驱动的引擎,该引擎实现了面向内存对象到数据库(例如关系数据库)的映射。不像已有的orm(objectrelationalmapping,对象关系映射)引擎,该引擎支持多级反射机制。

distributedmemoryobjectcaching提供了一个分布式内存对象缓存设施。此二级缓存提供了比数据库更快的访问速度,比一级缓存更大的容量和扩展性。

metadata-baseduirendering提供了一个所见即所得和拖放式的在线的gui设计器,以及一组gui生成器,为gui开发人员,以及最终用户都提供了良好的用户体验。

metadata-basedaccesscontrol实现了一组基于rbac的建模工具和执行引擎,允许定义和执行访问业务对象,以及不同抽象层次的元对象的访问控制规则。

metadata-basedversioncontrol通过反射版本相关的配置,实现了一个统一的版本控制机制,不仅适用于业务对象,也适用于不同抽象层次的元对象。

bootstrapping用于在系统最初执行的时候初始化元元模型的小的自描述的核心,使得系统能够基于一种全反射机制运行。

metadata-basedbehaviorcomposer提供了一个基本的框架用于行为的定义和执行。行为在集成的支持元建模的开发和运行平台的构成是操作、状态机、工作流和扩展点。

这种架构风格用于指导开发者设计和开发这类架构的软件系统,使得能识别关键的架构组件,之间如何相关关联。作为结果,这帮助定义了不同模块的职责以及它们的依赖,降低了模块间的耦合。

(2)对象结构

对象容器是一个核心组件,提供了一个共享的容器,用于持有运行的系统的服务器内存对象。这些对象包括业务对象,也包括不同抽象级别的元对象。要操作一个对象,该对象必须存在于对象容器中。为简化系统的设计和实现,对于内存中的业务对象和不同抽象层次的元对象,提出了一种统一的表达机制是非常重要的。

面向对象(object-oriented,oo)的语言提供了两级抽象,class与object,分别对应到编译时和运行时。适应性对象模型(adaptiveobjectmodel,aom)提供了两级抽象,meta-level和operational-level。aom有一个设施通过反射元数据用于操作数据(crud,创建,读取,更新和删除),但是系统通过硬编码方式耦合到了一个固定的结构用于操作元数据。mof通常提供了4层抽象(m3,m2,m1andm0),每一层通过更高一层直接描述下层的结构和含义被称为反射塔(reflectiontower)。

面向对象方法提供了从对象找到其metaobject(通常是它的类)的能力,而metaobject提供了对其实例的结构和行为的描述。在多层抽象层次的反射塔中,反射接口允许递归的穿过任意数量的元层,最顶层也可以反射其自身(例如mof)。如果每个层次的数据都表达为对象,如果为对象提供统一的结构和行为,提供统一的机制用于操作对象,将大幅简化整个系统的设计与实现。集成的支持元建模的开发和运行平台中,图5定义了一个统一的,简单的和基本的结构(不是一个完整定义),用以表达4个抽象层次的数据(m3,m2,m1和m0)。这个统一的基本结构和“everythingisathing”模式是大幅度简化系统设计和实现的关键。

如图5所示,本发明实施例提供的统一的结构表达4个抽象层次的对象示意图。

与aom架构风格的type-square模式的相关概念比较:(a)class对应其entitytype;(b)object对应其entity,(c)property对应其propertytype,(d)valueobject对应其property。与accountability模式相比较,(e)association对应其accountabilitytype,(f)link对应其accountability。通过扩展type-square模式和accountability模式,class、valueobject、link和association都从object派生。事实上,在集成的支持元建模的开发和运行平台中,所有的类都直接或间接派生自object。

首先探讨图5中实例级别(instance-level)的基本结构。每个对象都持有一组属性值,这可以使用一个dictionary实现,每个属性值也是一个对象,称为valueobject。每个valueobject持有属性的名称,它的类型以及它的当前值。一个多值的valueobject允许有超过一个当前值。valueobject有多种类型,分别是primitivevalue、enumerationvalue和objectvalue,primitivevalue有子类型,例如数字、字符串或布尔,objectvalue持有不超过1个对象的引用。对象可以通过link互相关联,表达复杂的数据关系。link从object派生,所以link重用了object的结构和行为。每个对象能够导航到更高层抽象的元对象,该元对象描述了其结构和行为。最顶层的对象描述了它们自身的结构和行为。

然后探讨图5中元级别(meta-level)的基本结构。通常,元对象是用于描述其他对象的对象。一个类可能用于描述其它的类。特别地,最顶层的类描述了它们自己。因此任何对象都有相应的类描述它。association是类之间的一种关系,用于表达类的实例之间的相互连接。一个link是一个association的实例。可以通过扩展已有的二元关联实现多元关联。一个generalization是一个更通用的类和一个更特殊的类之间的关系。类的结构和行为从object继承,可能需要被扩展或重写。例如,创建一个类通常意味着在数据库中创建一张新的表,为一个类创建一个属性通常意味着为一张表添加一个字段,所以集成的支持元建模的开发和运行平台扩展了class的save操作的实现。

objectcontainer是一个核心的组件,使用registry模式,该组件提供了一个容器用于持有运行系统中服务器上内存中的对象。这些对象包括业务对象,也包括不同抽象层次的元对象。要了操作一个对象,该对象必须在对象容器中存在。容器使用一个字典来持有对象。如果一个对象已经存在于对象容器中,再起被自动清除之前,该对象可以被直接访问而不需要访问数据库。考虑到服务器内存是有限的,只有元对象允许常驻内存,其他对象根据淘汰策略(比如fifo,firstinputfirstoutput或lru,leastrecentlyused)清除不需要的对象。

在多用户环境下,对于每个会话,系统提供一个临时的和私有的objectcontainer,用以持有未保存的数据,并与其他会话隔离这些未提交的更改。基于http的请求/响应循环,每个请求对应一个处理线程,而且每个线程创建一个临时对象容器持有该请求中未保存的对象。这些更改被写入到数据库,或被回滚。当服务器返回一个响应到客户端,同时临时容器被自动销毁。

在集成的支持元建模的开发和运行平台中,所有对象都是对象,每个对象都被其所属的类描述,最顶层的对象是自描述的。不同抽象层次的所有对象使用一种统一的,简单的和基本的结构,用于表达对象,无论该对象是业务对象(m0),或是不同元层的对象(m1,m2或m3)。幸运的是,前面提到的淘汰机制,隔离未提交的数据,以及合并已提交的对象的复杂性被封装到集成的支持元建模的开发和运行平台内部,对开发人员是透明的。这提供了一个强大的基础用于实现统一的行为表达、持久化、缓存、用户界面生成、通信、访问控制、版本控制等。

(3)对象行为行为是模型化动态变化的基本概念。行为是可以通过直接的调用被执行。很多情况下,一个模型中结构化的对象关联了行为的对象,这些行为对象定义了行为的细节,实现了该结构化的对象的高层次的行为。如图6,集成的支持元建模的开发和运行平台中提供了4种主要的机制为对象添加行为:(1)operations;(2)extensionpoints;(3)statemachine;(4)workflow。系统的行为作为元数据保存到数据库中,容易在运行时修改,通过动态反射实时生效。

如图6所示,本发明实施例提供的统一的行为元模型示意图。

集成的支持元建模的开发和运行平台显式提供了良好定义的扩展点,也称为热点,定义了一个或多个扩展可以被插入的地方。扩展基于一个基于web的编辑器编写脚本实现。扩展的定义信息被保存到数据库中,允许在运行时修改。当扩展点被激活时,通过内置的脚本引擎执行相应的脚本。借助缓存机制,避免了重复读数据库和编译脚本,提高了性能。有意思的是,当在为已有的扩展点编写脚本时,可以定义新的扩展点,实现了一种多级扩展性。

操作是类的一个行为的特性,可以直接被类的实例调用。操作定义了其名称、类型、参数用于被调用。操作最多必须包含一个返回参数。操作在调用期间可以触发异常。操作可以在派生的子类中被重定义。一个operation可能有一个method,该方法详细定义了该操作所需要的行为。在集成的支持元建模的开发和运行平台中,method是一种特殊的extension,所以extension的结构,脚本编辑器以及脚本执行引擎被重用了。在编写脚本时,可以实现可重用的操作,也可以重用已有的操作,这对于共享和重用提供了极大的灵活性。

序列工作流按顺序一个接一个执行一系列活动。状态机表达一个对象可能对应的各种状态,并以事件驱动的方式执行状态的变迁。这两种方法都可以通过图形编辑器组合一些规则表达了系统的行为。在集成的支持元建模的开发和运行平台中,extension被重用用于定制有限状态机中的状态、变迁,及工作流中的活动、数据流和控制流的规则。例如,extension可以在对象进入一个状态或离开一个状态时被调用,有可以在执行活动时被调用。

类object提供了一组通用的行为能够被其子类重用,而且提供了多种机制为对象和其子类添加行为。这些重用和扩展机制是一致的和强大的,而且对所有的对象都适应,无论是业务对象,不同抽象层次的元对象。通过为扩展点beforesave创建扩展,对象能够在保存变更前执行验证过程。例如,扩展能够用于校验一个dsml是否与元元模型一致,校验模型是否与元模型一致,或者校验业务对象是否与它们的模型一致。

(4)对象持久化

集成的支持元建模的开发和运行平台是一个基于web的多用户环境,为了更简化数据存储和访问的设计和实现,所有不同抽象层次的对象应该共存于一个数据库中。绝大多数企业信息系统使用关系型数据库,所以集成的支持元建模的开发和运行平台需要一个orm引擎实现面向对象的对象与关系数据库的映射。

大多数orm引擎基于javaannotations(或.netmappingattributes)、或基于xmlfiles实现,本平台系统能够在运行时定义类,不需要一个realclass以及相应的代码。所有的数据共存于一个数据库中,需要反射元数据映射业务数据到数据库中,而元数据映射到数据库中需要反射更高抽象层次的元数据,直到最顶层自描述的数据。

object提供了基本的crud(创建,读取,更新和删除)操作。这些操作不仅用于操作业务对象,而且用于操作不同元层的元对象。使用扩展点机制,为元对象添加一些附加的特性。例如,当更新一个类以及它的属性的修改到数据库中时,mbope组件自动地创建适当的ddl(datadefinitionlanguage,数据定义语言)脚本,并且执行该脚本用以同步数据库的结构,这些结构用以保存那个类的实例数据。有一些特性需要被实现,例如事务控制,延迟加载,缓存。详细的介绍orm引擎超出了本论文的范围。幸运的是,这些内部的和细节的复杂性被集成的支持元建模的开发和运行平台封装,对用户是透明的。

(5)对象缓存

当访问一个保存在数据库中的业务对象时,将反射类。这个类也是一个对象,访问这个类将反射其元类,直到最顶层的自描述的元对象结束。如果访问每个对象将访问数据库,则这种多级反射式架构将导致严重的性能下降。减少数据库的访问次数是确保可接受性能的关键,对象缓存技术能提供了一种可行的解决方案。

在集成的支持元建模的开发和运行平台中,一个对象缓存由一个对象组成的池子构成。当访问假设在后台数据库中存在的一个对象,它首先检查缓存。如果该对象能被找到,使用缓存中的对象,而不访问后台数据库。这种情况称为缓存命中。另一种情况,当缓存中被请求没有找到该对象,这称为缓存未命中。实现未缓存的对象将从后台数据库中加载,通常会被复制到缓存中,为下一次访问做准备。

对象容器用于持有一组内存对象,是一种本地缓存。这个缓存为每个运行中的系统的每个web服务器(或应用服务器)创建。运行在该服务器上的所有线程可直接访问该缓存中的对象,没有网络,序列化和反序列化开销。在集群环境中,当一个对象在某个服务器上被更改,需要同时更改其他服务器上该对象的所有副本。为了进一步提高缓存命中率,集成的支持元建模的开发和运行平台提供了两级缓存机制。对象容器是其中的一级缓存,下面介绍的分布式内存对象缓存是二级缓存。

二级缓存使用了一个分布式的内存对象缓存系统,称为memcached。二级缓存提供了比数据库更快的访问速度,比一级缓存更大的容量和扩展性。对象首先被序列化,然后被保存到一个或多个memcached服务器内存中,服务器可以组成集群。当请求数据时,memcached将从集群中定位该对象,然后将对象反序列化。

这个分布式内存对象缓存组件提供了一组简单的api允许创建、定位、更新或删除缓存中的对象。如果访问的对象不在一级缓存中,二级缓存将被自动的访问,如果对象存在二级缓存中,该对象将自动从二级缓存恢复到一级缓存中,不再需要访问后端数据库。这个组件只是被对象容器组件调用,其接口和内部实现对于开发者是透明的,这降低了组件间的耦合,隐藏了内部的复杂性。

在反射式架构的系统中,缓存通常用于缓存元对象。本发明的方法提供给了统一的截止,不仅用于缓存不同抽象层次的元对象,还用于缓存使用业务对象。通过两级缓存机制,获得了可接受的性能和扩展性。虽然集成的支持元建模的开发和运行平台的两级缓存系统的内部结构是复杂的,这些内部复杂性被封装在集成的支持元建模的开发和运行平台内部,对于用户是透明的。

(6)gui渲染

在企业应用开发中,图形用户界面(gui)编程需要大量的投入。在集成的支持元建模的开发和运行平台中,用于描述领域对象的类模型允许在运行时修改,它们耦合的图形用户界面也应该允许在运行时修改。集成的支持元建模的开发和运行平台需要提供不仅提供创建运行时gui模型,和使用这些模型生成图形用户界面的能力,而且提供验证,组织,检索和发送信息到领域层的能力。

不做任何界面设计,也不编写一行代码,完全依靠业务对象的元数据反射,系统可以自动的生成默认的object-group视图(基于表格)和objectview视图(基于表单),而且提供了检索,显示,创建,修改,删除和保存业务数据的基本功能。作为一种补充,集成的支持元建模的开发和运行平台提供了一个所见即所得和拖放式的在线界面设计器,不仅提供了更好的灵活性和可定制性,并且为用户界面开发人员以及最终用户都提供了良好的用户体验。

平台的ui设计器基于extjs,extjs是一个跨浏览器的javascript库,用于构建富交互式的web应用。基于元对象,例如类、属性和关联,这个工具允许通过拖拽元数据元素以及ui组件到内容区,快速设计gui。工具能够自动创建合适的组件,附带适当的配置,例如数据绑定,验证,检索和发送数据到领域层。可以按需要进一步精化。这些gui模型表达为json[39]格式(基于文本)的元数据,保存在数据库中,在需要的时候能被gui渲染引擎动态反射。同样的数据在不同的场景可以使用不同的gui模型,或使用不同的渲染引擎。

集成的支持元建模的开发和运行平台为不同的抽象层次的对象,提供了一个统一的,强大的和元数据驱动的工具用于设计用户界面。同样的数据在不同场景下可能有多种表现形式,允许多个界面视图,同一个视图针对不同场景(如桌面和移动)可能有不同的界面渲染引擎。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用全部或部分地以计算机程序产品的形式实现,所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输)。所述计算机可读取存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1