首页 / 专利库 / 动物学 / 访问 / 访问数据访问层的实体

访问数据访问层的实体

阅读:194发布:2020-05-12

专利汇可以提供访问数据访问层的实体专利检索,专利查询,专利分析的服务。并且公开了 访问 数据访问层的实体。本 发明 提供了一种用于数据访问层的实体的方法和系统,所述数据访问层遵循实体关系模型,其中,根据实体及其之间的关系来描述数据;其中,为实体提供CRUD界面;本发明包括以下各项:a)定义元实体,在下文中称为虚拟实体,作为一个或多个实体的各部分的组合物而得到;b)经由虚拟实体描述符将虚拟实体描述为其中经由链接以父子结构来连接实体的分级结构;在所述虚拟实体描述符中, 指定 从每个实体获取哪些性质以形成虚拟实体的部分实体;c)在虚拟实体上提供CRUD界面;d)在运行时间,经由其CRUD界面来访问虚拟实体,所述访问被实现为对访问组成虚拟实体的CRUD方法的一组调用。,下面是访问数据访问层的实体专利的具体信息内容。

1.一种用于访问数据访问层的实体的方法,所述数据访问层遵循实体关系模型,其中根据实体及其之间的关系来描述数据;其中,为实体提供CRUD界面;所述方法的特征在于其包括以下步骤:
a)定义元实体,在下文中称为虚拟实体,作为一个或多个实体的各部分的组合物而得到;
b)经由虚拟实体描述符将虚拟实体描述为其中经由链接以父子结构来连接实体的分级结构;在所述虚拟实体描述符中,指定从每个实体获取哪些性质以形成虚拟实体的部分实体;
c)在虚拟实体上提供CRUD界面;
d)在运行时间,经由其CRUD界面来访问虚拟实体,所述访问被实现为对访问组成虚拟实体的实体的CRUD方法的一组调用,
其中,步骤d)的对虚拟实体的访问是经由写入方法,
其中,所述写入方法是编辑方法,其中:
—对虚拟实体的分级结构执行检验以便判定其每个部分实体的处理顺序:
—如果用直接链接将子实体链接到父实体,则在父实体之前处理子实体;
—如果用返回链接将子实体链接到父实体,则在父实体之后处理子实体;
—其中,每个部分实体的处理包括以下子步骤:
—检查部分实体以检验其是否将被修改
—如果其将被修改:
• 从数据库检索最新完整实体实例;
• 在当前部分实体的分级位置上执行检验:
—如果当前部分实体是根实体或被直接链接到其父:在被标记为被查找时通过其查找标识符之一来进行检索,或通过其唯一密钥之一来进行检索;
—如果其被成功地检索,则用数据库上的新值来更新它,除非其为未被标记为“可更新”的查找实体;否则,
• 如果当前部分实体被返回链接到其父:如果当前部分实体不是可通过唯一密钥检索的,则创建具有新值的实体实例;否则如果其可访问性质的所有新值是无效的,则从数据库去除整个实体实例,否则如果可访问性质的至少一个新值不是无效的,则用新值来更新当前部分实体。
2.根据权利要求1所述的方法,其中,连接父和子实体的链接选自由以下各项中的一个或多个组成的组:
—直接链接,其中,所述父实体包括参考子实体的一组性质;
—返回链接,其中,所述子实体包括参考父实体的一组性质;
—枢轴返回链接,其中,针对给定枢轴标识符的每个期望值将一组子实体性质复制一次。
3.根据权利要求1所述的方法,其中,至少一个子实体是可选副实体,意味着父实体与子实体之间的关系本身不是强制性的。
4.根据权利要求1所述的方法,其中,至少一个直接链接子实体是查找副实体,意味着至少一组性质被标记为唯一地识别副实体实例的标识符,并且所述查找副实体被用于基于其标识符组对特定实例进行定位,并且用于从储存库读取其性质,使得在父实体中能够更新参考该组的链接性质。
5.根据前述权利要求中1至4中的任一项所述的方法,其中,关于实体的信息被存储在储存库中,所述储存库是数据库。
6.根据权利要求5所述的方法,其中,所述储存库是关系数据库。
7.根据前述权利要求1至4中的任一项所述的方法,其中,所述虚拟实体实例的集合被实现为由以下各项中的一个或多个组成的组的选择:
—“.NET”标准对象;
—被束缚于Microsoft ObjectDataSource的Microsoft DataSet和/或DataTable对象;
—适合于向第三方ASP.NET控制提供数据的其它标准表示。
8.根据权利要求1所述的方法,其中,所述写入方法是删除方法,其中:
—如果用返回链接将子实体链接到父实体,则之前删除子实体并之后删除父实体;否则,
—如果用直接链接将子实体链接到父实体,则只删除父实体。
9.根据前述权利要求1至4中的任一项所述的方法,其中,对于至少一个实体的CRUD界面的方法中的至少一个而言,关联将在运行时间执行的至少插件,其中,插件是实现定制动作的外部软件
10.根据权利要求9所述的方法,其中,所述至少一个实体是虚拟实体。
11.根据前述权利要求1至4中的任一项所述的方法,其中,所述实体是定制实体,用包含在动态实体描述符结构(DED)中的信息以动态的方式生成;其中,所述动态实体描述符结构(DED)包括以下信息:
—关于在数据访问层中如何表示实体的信息(ERI);
—关于在储存库(DB)中如何存储实体数据的信息(ESI);
—关于将如何对实体进行写入并调用哪些外部提供者(WOP)以执行写入操作的信息(EWI)。
12.一种用于访问数据访问层的实体的设备,所述数据访问层遵循实体关系模型,其中根据实体及其之间的关系来描述数据;其中,为实体提供CRUD界面;所述设备的特征在于其包括以下装置:
a)用于定义元实体的装置,所述元实体在下文中称为虚拟实体,作为一个或多个实体的各部分的组合物而得到;
b)用于经由虚拟实体描述符将虚拟实体描述为其中经由链接以父子结构来连接实体的分级结构的装置;在所述虚拟实体描述符中,指定从每个实体获取哪些性质以形成虚拟实体的部分实体;
c)用于在虚拟实体上提供CRUD界面的装置;
d)用于在运行时间,经由其CRUD界面来访问虚拟实体的装置,所述访问被实现为对访问组成虚拟实体的实体的CRUD方法的一组调用,
其中,用于对虚拟实体的访问的装置d)是利用写入方法的装置,
其中,所述写入方法是编辑方法,其中:
—对虚拟实体的分级结构执行检验以便判定其每个部分实体的处理顺序:
—如果用直接链接将子实体链接到父实体,则在父实体之前处理子实体;
—如果用返回链接将子实体链接到父实体,则在父实体之后处理子实体;
—其中,每个部分实体的处理包括以下子步骤:
—检查部分实体以检验其是否将被修改;
—如果其将被修改:
• 从数据库检索最新完整实体实例;
• 在当前部分实体的分级位置上执行检验:
—如果当前部分实体是根实体或被直接链接到其父:在被标记为被查找时通过其查找标识符之一来进行检索,或通过其唯一密钥之一来进行检索;
—如果其被成功地检索,则用数据库上的新值来更新它,除非其为未被标记为“可更新”的查找实体;否则,
• 如果当前部分实体被返回链接到其父:如果当前部分实体不是可通过唯一密钥检索的,则创建具有新值的实体实例;否则如果其可访问性质的所有新值是无效的,则从数据库去除整个实体实例,否则如果可访问性质的至少一个新值不是无效的,则用新值来更新当前部分实体。

说明书全文

访问数据访问层的实体

技术领域

[0001] 本发明涉及分别根据权利要求1和14的前序的用于访问数据访问层的实体的方法、系统。

背景技术

[0002] 大多数企业和制造工艺使用数据库管理系统来存储和检索数据,即执行其任务所需的信息。用于感兴趣的特定域的此类信息的概念描述称为“物理数据模型”。
[0003] 软件应用程序通常被与在“数据库层级”(DB层级)上的用来处理物理数据模型信息的数据库结构保持分开。这借助于“数据提取层”(DAL)来完成,其为“逻辑数学模型”的实现。逻辑数据模型的非常常见的类型是“实体关系模型”(ERM),其中,根据实体、即表示真实世界对象的数据结构及其之间的关系来描述数据。
[0004] 例如,在生产环境数据模型中,例如在制造执行系统(MES)中,我们将说“机器属于特定生产线”。在本示例中,“机器”和“生产线”是我们的数据模型的实体,同时“属于”是其之间的关系。
[0005] 在数据模型之上放置施加于信息的一组算法、约束和规则的描述:这是“企业逻辑”(BL)层级。例如,参考前一示例,我们可以说“一个人只有当他/她具有特定技能组时才能操作特定机器”。“人”、“机器”和“技能”是我们的逻辑数据模型的实体,“具有”是人和技能之间的关系,并且以上句子是由我们的企业逻辑施加的约束。
[0006] 当在特定域中开发一般软件解决方案时,在DB和DAL两个层级,通常以固定的数据模型来构造信息:基于关于真实过程的一般知识来定义实体和关系。这适用于企业逻辑层级,其中,要求所实现的算法、规则和约束来适合其中将使用该解决方案的所有特定情况。
[0007] 遗憾的是,主要缺点是每当将一般解决方案应用于特定情况时,在DB、DAL、BL层级处常常需要繁重的定制。
[0008] 举例说明此问题的简单示例是处理关于人的信息。在一般数据模型中,对应于人的实体包含通常表示我们感兴趣的域中的人的所有性质,例如在本示例中,人类资源管理系统,:姓氏、名字、出生时间和地点等。如果在USA使用此一般数据模型,需要将其扩展至包括重要的SSN(社会安全号码)信息,其出于税收的目的唯一地识别那个国家中的人。在此极其简单的附加性质情况下,DB层级上的定制是与现有的一个呈1:1关系的表格或附加表格的附加列。关于数据读取过程,在DB层级,经由SQL联接子句将读取语句修改为包括新添加的性质,但是遗憾的是这在DAL层级是不真实的。
[0009] 此外,大多数问题在定制数据写入过程时出现。事实上,关系数据库不具有对应于用于读取的“联接”子句的写结构。在DAL和BL层级,问题甚至更复杂,事实上,在不同的情况下必须保持/扩展/覆写由基本实体实现的预先存在的写逻辑。
[0010] 正如此非常简单的示例性情况所示,常见定制在将一般解决方案应用于特定情况时如何要求包括附加实体、性质和关系及附加的不同行为、约束和检查是显而易见的。
[0011] 因此,本领域中的要求是通过以高效且灵活的方式对DAL层进行定制来适应特定解决方案的数据模型,其常常不同于由通用解决方案实现的一般数据模型。遗憾的是,通常通过部分地或完全取代产品持续(product persistence)层来完成DAL层的定制,这意味着相当大的开发努
[0012] 因此,在实际情况中,常常发生的是一般产品DAL和BL层通常被丢弃并从头开始重新写入,以便获得代表(typical of)物理数据处理层的弹性和灵活性。这是由于在DAL层级、实体是刚性的且两个或更多实体的数据不可以高效的方式分组的事实。
[0013] 遗憾的是,跳过DAL层的主要缺点是可能丢失用于数据模型的实体的某些持续功能和与之一起的可用于编程短语的某些控制和检查能力。

发明内容

[0014] 因此,本发明的目的是通过提供用于访问数据访问层的实体并还针对上数据层实现代表访问数据库物理层的灵活性的方法和系统来克服上述缺点。
[0015] 由用于访问数据访问层的实体的方法和系统来实现上述目的,数据访问层遵循其中根据实体及其之间的关系来描述数据的实体关系模型;其中,实体提供有CRUD接口;本发明包括以下各项:
[0016] a)定义元实体,在下文中称为虚拟实体,作为一个或多个实体的各部分的组合物而得到;
[0017] b)经由虚拟实体描述符将虚拟实体描述为其中经由链接以父子结构来连接实体的分级结构;以所述虚拟实体描述符,指定从每个实体获取哪些性质以形成虚拟实体的部分实体;
[0018] c)在虚拟实体上提供CRUD接口;
[0019] d)在运行时间,经由其CRUD接口来访问虚拟实体,所述访问被实现为对访问组成虚拟实体的实体的CRUD方法的一组调用。
[0020] 在提出的发明的实施例中,可以方便地从由以下各项中的一个或多个组成的组中选择连接父和子实体的链接:
[0021] —直接链接,其中,所述父实体包括参考子实体的一组性质。
[0022] —返回链接,其中,所述子实体包括参考父实体的一组性质;
[0023] —枢轴返回链接,其中,针对给定枢轴标识符的每个期望值将一组子实体性质复制一次。
[0024] 在提出的发明的实施例中,至少一个子实体可以有利地是可选副实体,意味着父实体与子实体之间的关系本身并不是强制性的。
[0025] 在提出的发明的实施例中,至少一个直接链接子实体可以方便地是查找副实体,意味着至少一组性质被标记为唯一地识别子实体实例的标识符且查找副实体被用于基于其标识符组对特定实例进行定位,并用于从储存库读取其性质,使得能够在父实体中更新参考该组的链接性质。
[0026] 在提出的发明的实施例中,可以将关于实体的信息存储在可以是数据库、优选地关系数据库中的储存库中。
[0027] 在提出的发明的实施例中,可以经由读取方法或经由写入方法来执行项目d)的虚拟实体的访问。
[0028] 在提出的发明的实施例中,可以优选地将虚拟实体上的读取方法实现为组成虚拟实体的实体上的读取方法的调用。
[0029] 在提出的发明的实施例中,可以通过由以下各项中的一个或多个组成的组的选择来有利地实现虚拟实体实例的集合:
[0030] —“.NET”标准对象;
[0031] —被束缚于Microsoft ObjectDataSource(微软对象数据源)的Microsoft DataSet(微软数据集)和/或DataTable(数据表)对象;
[0032] —适合于向第三方ASP.NET控制提供数据的其它标准表示。
[0033] 在提出的发明的实施例中,写入方法可以是编辑方法,其中:
[0034] —对虚拟实体的分级结构执行检验以便判定其每个部分实体的处理顺序:
[0035] —如果用直接链接将子实体链接到父实体,则在父实体之前处理子实体;
[0036] —如果用返回链接将子实体链接到父实体,则在父实体之后处理子实体;
[0037] —其中,每个部分实体的处理包括以下子步骤:
[0038] —检查部分实体以检验其是否将被修改;
[0039] —如果其将被修改:
[0040] • 从数据库检索最新完整实体实例;
[0041] • 在当前部分实体的分级位置上执行检验:
[0042] —如果当前部分实体是根实体或被直接链接到其父:它通过其查找标识符(如果被标记为被查找)之一或通过其唯一密钥之一来进行检索;
[0043] —如果其被成功地检索,用数据库上的新值来更新它,除非其为未被标记为“可更新”的查找实体;否则,
[0044] • 如果当前部分实体被返回链接到其父:如果当前部分实体不是可通过唯一密钥检索的,创建具有新值的实体实例;否则如果其可访问性质的所有新值是无效的,从数据库去除整个实体实例,否则如果可访问性质的至少一个新值不是无效的,则用新值来更新当前部分实体。
[0045] 在提出的发明的实施例中,写入方法还可以是删除方法,其中:
[0046] —如果用返回链接将子实体链接到父实体,则之前删除子实体并之后删除父实体;否则,
[0047] —如果用直接链接将子实体链接到父实体,则只删除父实体。
[0048] 在提出的发明的实施例中,对于至少一个实体的CRUD接口的方法中的至少一个而言,可以优选地关联将在运行时间执行的至少插件,其中,插件是实现定制动作的外部软件模
[0049] 在提出的发明的实施例中,其中,所述至少一个实体可以方便地是虚拟实体。
[0050] 在提出的发明的实施例中,所述实体可以是定制实体,用包含在动态实体描述符结构中的信息以动态的方式生成;其中,所述动态实体描述符结构包括以下信息:
[0051] —关于在数据访问层中如何表示实体的信息;
[0052] —关于在储存库中如何存储实体数据的信息;
[0053] —关于将如何写入实体和调用哪些外部提供商以执行写入操作的信息。
[0054] 此外,可以提供计算机程序元件,包括用于在被加载在计算设备的数字处理器中时执行根据上述方法的步骤的计算机程序代码。
[0055] 另外,可以提供存储在计算机可用介质上的计算机程序产品,包括用于促使计算设备执行所述方法的计算机可读程序代码。
[0056] 用提出的发明的实施例,以高效的方式处理数据模型信息,同时使在识别一般结构和关于特定域中的数据的性质时通常所需的开发努力最小化。
[0057] 提出的发明的实施例允许读和写操作两者中的属于不同实体的数据的高性能和灵活的组合。
[0058] 提出的发明的实施例在DAL层处针对读和写操作两者允许SQL语言在数据库层级针对读操作提供的类似种类的灵活性。
[0059] 提出的发明的实施例允许BL层的完整或部分定制。
[0060] 提出的发明的实施例不要求定制数据访问类的开发。
[0061] 用提出的发明的实施例,组成基本构建块、库或动态定义实体以创制期望逻辑数据模型是非常简单的。事实上,在此组成过程中,保留原始企业逻辑还是将其扩展/重写以适合特定模型需要的选择只能涉及虚拟实体的一小部分上的特定动作以及整个虚拟实体。
[0062] 提出的发明的实施例允许展示统一界面,即用于应用程序必须处理的所有数据模型实体的交互规则集合,从基本库实体到由许多标准和定制副实体行为组成的复杂聚合。附图说明
[0063] 现在将参考附图在优选但非排他性的实施例中描述本发明,在附图中:
[0064] 图1是示意性地举例说明现有技术中的用于数据访问的3层数据模型的方框图
[0065] 图2是示意性地举例说明根据提出的发明的示例性实施例的用于数据的3层数据模型的方框图;
[0066] 图3是示意性地举例说明根据提出的发明的示例性实施例的被定义为真实实体的分级结构的虚拟实体的不同示例的图;
[0067] 图4是示意性地举例说明根据提出的发明的示例性实施例的被定义为真实实体的分级结构的虚拟实体的不同示例的图;
[0068] 图5是示意性地举例说明根据提出的发明的示例性实施例的被定义为真实实体的分级结构的虚拟实体的不同示例的图;
[0069] 图6是示意性地举例说明根据提出的发明的示例性实施例的被定义为真实实体的分级结构的虚拟实体的不同示例的图;
[0070] 图7是示意性地举例说明根据提出的发明的示例性实施例的被定义为真实实体的分级结构的虚拟实体的不同示例的图;
[0071] 图8是示意性地举例说明根据提出的发明的示例性实施例的被定义为真实实体的分级结构的虚拟实体的不同示例的图;
[0072] 图9是示意性地举例说明根据提出的发明的示例性实施例的用于实体操作的插件执行的示例的流程图
[0073] 图10是示意性地举例说明根据本发明的示例性实施例的包含在动态实体描述符结构中的信息的类型的图。

具体实施方式

[0074] 根据提出的发明,DAL层遵循其中根据实体及其之间的关系来描述数据的ERM模型。
[0075] 实体展示CRUD界面,即其在适用时支持四个基本存储操作:创建、读取、更新、删除。应注意的是最小CRUD界面要求至少支持读取操作。
[0076] 提出的发明引入“实体聚合”的概念,根据该概念:
[0077] —如果在两个实体之间存在关系,即一个实体包含对另一个实体的参考,则能够将其聚合
[0078] —可以对该聚合进行迭代,因此给出分级结构,即聚合实体的树
[0079] —此类聚合的结果是称为“虚拟实体”的元实体
[0080] —基本实体如何被链接以便获得虚拟实体的描述称为“虚拟实体描述符”[0081] —虚拟实体自动地展示CRUD界面。
[0082] 实体表明其之间的允许链接(关系)。这每当实体包含对另一实体的参考、即唯一地识别另一实体的实例的一组性质时发生。
[0083] 虚拟实体描述符是分级、即树形结构,其中子实体通过“链接”性质被连接到父实体,并且其中,指定从结构的一组不同实体中采取哪些性质来形成新的虚拟实体。在其它发明实施例中,可以优选地对此类性质给定新名称“别名”。
[0084] 可以将提出的发明实现为基于实体关系逻辑数据模型的架构。可以将虚拟实体描述符看作一类架构。可以优选地将虚拟实体描述符串行化和去串行化以便在不写入代码的情况下被容易地使用,例如可行的表示是XML语言。
[0085] 有利地,用提出的发明,特定解决方案的DAL和BL层可以基于虚拟实体而不是类对象。事实上,提出的发明通过提供虚拟实体描述符的库来避免在应用和部署努力方面具有其明显缺点的不断地扩展定制聚合企业对象的库的需要。
[0086] 在运行时间,经由虚拟实体的CRUD界面来访问虚拟实体。经由读取或写入方法的访问被实现为对访问构成虚拟实体的实体的CRUD方法的一组调用。
[0087] 图1和图2分别示意性地举例说明现有技术和发明示例中的用于数据访问的3层数据模型的差别。在BL层级,在如图1所示的现有技术中,存在将特定企业逻辑实现为类的每个解决方案定制,替代地在如图2所示的示例性实施例中,存在作为虚拟实体描述符的企业实体的和可选地插件的定义。
[0088] 在DAL层级,在如图1所示的现有技术中,存在一般域实体,而在如图2所示的示例性实施例中,存在一般域CRUD实体。在图2中,BL层级的虚拟实体的定义不要求对数据库层级的直接访问和DAL层级的跳过,对于如图1所示的现有技术解决方案而言情况常常如此。
[0089] 链接类型
[0090] 在虚拟实体中,可以将副实体、即子实体直接链接或返回链接到父实体。在其它实施例中,返回链接还可以是枢轴链接(pivot-link)。
[0091] 在本文中,术语“直接链接”的副实体指示父实体包括参考副实体的一组性质。替代地,在术语“返回链接”副实体的情况下,意图在于副实体参考父实体。
[0092] 用示例1、4和5来举例说明直接链接、返回链接和枢轴链接之间的差别。
[0093] 示例1:直接链接
[0094] 在示例性实施例中,在MES情况中,让我们假设以下三个基本DAL实体是生产订单管理组件的一部分:
[0095] —“运动(campaign)”实体,表示制造特定数量的产品的生产请求
[0096] —“订单”实体,表示生产特定材料所需的操作,以及相关信息。运动由一个或多个订单组成。
[0097] —“条目”实体:表示用于完成整个生产订单的执行的制造步骤。订单由一个或多个条目组成。
[0098] 虚拟实体的非常简单的示例可以聚合以下性质数据:
[0099] —条目标识符(从条目获取)
[0100] —条目估计起始时间(从条目获取)
[0101] —条目估计结束时间(从条目获取)
[0102] —条目所属的订单的标识符(从订单获取)
[0103] —由订单生成的最终材料的标识符(从订单获取)
[0104] —订单所属的运动的标识符(从运动获取)
[0105] 在本简单示例情况下,虚拟实体被以图形方式表示为如图3的虚拟实体图表T1所示的三个级联直接链接实体的树。
[0106] 本示例中的链接性质是由订单和条目实体两者展示的订单标识符和由运动和订单实体两者展示的运动标识符。
[0107] 副实体类型
[0108] 在提出的发明的实施例中,可以提供其它两个类型的副实体,例如“可选”副实体或“查找”副实体。
[0109] 可选副实体
[0110] 根据第一附加副实体类型,如果父实体与副实体之间的关系本身不是强制性的,即参考实体不一定指向被参考实体的实例,则可以将副实体标记为“可选”副实体。
[0111] 示例2:可选副实体
[0112] 在示例性实施例中,让我们假设条目实体包含称为参考被关联到条目的执行设备的设备ID的性质,如果有的话,如图3的虚拟实体图T2中所示。
[0113] 在这种情况下,由于该关联不是强制性的,即条目不一定具有关联设备,所以此类副实体被标记为可选的。
[0114] 在此虚拟实体描述符上调用的读取方法返回所有条目实例,无论它们是否指向相关设备。对于不存在到设备实体的关联的虚拟实体实例而言,从设备实体提取的性质具有无效值。
[0115] 查找副实体
[0116] 根据第二附加副实体类型,可以将直接链接的副实体标记为“查找”副实体。
[0117] 要求至少一组性质的查找副实体被标记为唯一地识别副实体实例的“标识符”。
[0118] 在查找副实体中,以与对于非查找副实体而言不同的方式来实现写入方法,而读取方法的实现不受影响。实际上,查找副实体并不意图被写入,而是意图被用于基于其标识符组对特定实例进行定位并用于从储存库读取其性质,使得能够在父实体中更新对其进行参考的链接性质。
[0119] 在写入期间,从数据库搜索并读取与对至少一个标识符给定的值匹配的副实体实例,并且在父实体中更新所有链接性质。结果是副实体未被修改,但是在然后可以参考不同实例的父实体中发生更新。
[0120] 在本发明的其它实施例中,还可以提供具有混合查找性质的副实体,在本文中称为“可创建”和/或“可更新”查找副实体。在“可创建”查找副实体中,如果未发现匹配的副实体实例,现在用给定性质值创建一个新的,并且父实体将对其进行参考。在“可更新”副实体中,当识别并检索到匹配的副实体实例时,在数据库中更新任何经修改的性质。
[0121] 示例3:查找副实体
[0122] 图3的虚拟实体图T3a和T3b描述两个虚拟实体描述符,其不同之处在于在第二虚拟实体描述符中运动副实体被标记为“查找”。
[0123] 对于第一虚拟实体而言,此虚拟实体的实例上的写入方法的调用意味着根据数据,可以调用订单和运动实例两者上的写入方法。
[0124] 替代地,对于第二虚拟实体而言,此虚拟实体的实例上的写入方法的调用意味着只有订单实例被写入,并且特别地,其指向与针对其“标识符性质”给定的值、例如Campaign.Name(运动.名称)给定的值匹配的运动实例。
[0125] 枢轴链接
[0126] 在提出的发明的实施例中,优选的是将某些返回链接副实体标记为枢轴链接副实体。
[0127] 事实上,应注意的是在返回链接中,副实体通过一个或多个性质来参考父实体。遗憾的是,这意味着除非关系是一对一的,在结果得到的一组虚拟实体实例中,重复来自父实体的性质值,因为可能存在参考同一父实体实例的多个副实体实例。枢轴链接不具有此类缺陷,如用描绘返回链接与枢轴返回链接之间的差异的示例4和5举例说明的那样。
[0128] 示例4:返回链接副实体
[0129] 让我们假设实体EntryProperty(条目实体)表示被关联到条目实体的性质。其通过性质EntryID(条目ID)来参考条目性质并展示表示性质名称的名称性质。用EntryPropertyValue(条目性质值)实体来表示EntryProperty(条目性质)实例所取的值,其借助于性质EntryProperty.Name(条目性质.名称)来参考EntryProperty(条目性质),并展示表示性质值的Value性质,如图4中的虚拟实体图T4所示。
[0130] 在表1中举例说明结果得到的虚拟实体实例的样本集。
[0131]
[0132] 表1
[0133] 存在其中此类数据聚合没有用的许多常见情况。
[0134] 因此,在某些此类情况中,期望具有“枢转”副实体数据组织,其中,针对给定“枢轴标识符”的每个期望值将一组副实体性质(和副副实体)复制一次。枢轴标识符是枢转副实体的一组性质,其值被用来识别将在虚拟实体中枢转的实例。这些值被称为“枢轴值”。如果针对给定枢转副实体指定N个枢轴值,则从其开始的子树将被复制N次,每个枢轴值一次。
[0135] 示例5:枢轴链接副实体
[0136] 在本示例中,与示例4相比,结果得到的虚拟实体是完全不同的,因为EntryProperty(条目性质)在其Name(名称)性质上枢转,如图4的虚拟实体图T5a所示。
[0137] 假设3个枢轴值,给定“propA”、“propB”、“propC”,从EntryProperty(条目性质)开始的子结构在内部被复制3次,如图4的虚拟实体图T5b中所示。
[0138] 因此,枢轴值变成如在表2中举例说明的复制性质的前缀。有利地,可以指定独立的别名。
[0139]
[0140] 表2
[0141] 方便地,可以以如表2所示的更有用的形式用此虚拟实体来表示示例4的表1所示的相同样本数据。
[0142] 有利地,用枢轴链接副实体,实现数据组织的用户友好方式,因为避免了根实体的数据的冗余复制。如示例4和5所示,表2仅包含3行,而表1包含8行。
[0143] 事实上,应用常常要求在没有不必要冗余的情况下以表的方式来组织数据,如从关系数据库中的SQL联接命令得到的情况一样。
[0144] 应注意的是根据定义,枢转实体是可选的。事实上,在本示例中,条目2不具有称为“propC”的性质且条目3不具有称为“propA”的性质,因此,相应的虚拟实例性质被设置为无效的。
[0145] 当实体以1:1的关系参考另一实体时,它可以被称为其“扩展”。有利地,在发明实施例中,可以动态地生成扩展实体并在虚拟实体中用作其扩展的实体的返回链接副实体。
[0146] 示例5a:枢轴链接副实体的另一示例:
[0147] 在本示例中,使用了两个实体,Person(人)和PersonCustomAttribute(人定制属性)。Person实体展示以下四个性质:代码、名字、姓氏和电子邮件,其中,代码性质是唯一地识别人的号码。
[0148] PersonCustomAttribute(人定制属性)实体展示以下三个性质:AttributeName(属性名称)、AttributeValue(属性值)和PersonCode(人代码)。PersonCode(人代码)性质识别属性所参考的人。
[0149] 让我们假设三个Person(人)实例被存储在储存库中。
[0150] 第一个人具有以下数据:
[0151] —代码:1
[0152] —名=John
[0153] —姓=Smith
[0154] —电子邮件=jsmith@hotmail.com
[0155] 第二个人具有以下数据:
[0156] —代码:2
[0157] —名=Mary
[0158] —姓=Williams
[0159] —电子邮件=mary.Williams@gmail.com
[0160] 第三个人具有以下数据:
[0161] —代码:3
[0162] —名=James
[0163] —姓=Moore
[0164] —电子邮件=jamesm@email.com
[0165] 让我们假设John Smith具有两个关联的定制属性,表明他具有黑色眼睛和棕色头发,而Mary Williams具有三个关联的定制属性,表明她具有蓝色眼睛,她体重55Kg,并且她165cm高。James Moore不具有关联的定制属性。
[0166] 因此,储存库包含以下五个PersonCustomAttribute(人定制属性)实例:
[0167] AttributeName = eyes
[0168] AttributeValue = black
[0169] PersonCode = 1
[0170] (=> “John Smith has black eyes”)
[0171] AttributeName = hair
[0172] AttributeValue = brown
[0173] PersonCode = 1
[0174] (=> “John Smith has brown hair”)
[0175] AttributeName = eyes
[0176] AttributeValue = blue
[0177] PersonCode = 2
[0178] (=> “Mary Williams has blue eyes”)
[0179] AttributeName = weight
[0180] AttributeValue = 55
[0181] PersonCode = 2
[0182] (=> “Mary Williams weighs 55”)
[0183] AttributeName = height
[0184] AttributeValue = 167
[0185] PersonCode = 2
[0186] (=> “Mary Williams is 167 cm tall”)
[0187] 还可以经由用于人的表3和用于PersonCustomAttributes(人定制属性)的表4以紧凑表格的形式来表示此类数据。
[0188]
[0189] 表3
[0190]
[0191] 表4
[0192] 如图5的虚拟实体图T7所示地描述相应的虚拟实体,假设从Person(人)获取性质Name(名)和Surname(姓)并从PersonCustomAttribute(个人定制属性)获取AttributeName(属性名称)和AttributeValue(属性值)。
[0193] 此类虚拟实体具有表5所示的虚拟实例。
[0194]
[0195] 表5
[0196] 应注意的是在表5中,不存在James Moore,因为他不具有与其相关联的定制性质。替代地,在副实体PersonCustomAttribute(人定制属性)在虚拟实体描述符中被标记为“可选”的情况下,虚拟实体具有如表6所示的附加实例。
[0197]
[0198] 表6
[0199] 在替换虚拟实体描述符中,可以有利地插入PersonCustomAttribute(人定制属性)作为枢转实体。
[0200] 在这种情况下,指定哪个是将被用作“枢轴性质”和用于它的一组“枢转值”的PersonCustomAttribute(人定制属性)性质。
[0201] 例如,AttributeName(属性名称)被指定为枢轴性质且“眼睛”、“头发”和“体重”被指定为枢轴值。在表7中示出结果得到的虚拟实例。
[0202]
[0203] 表7
[0204] 示例6:具有不同类型的副实体的概括示例
[0205] 为了举例说明提出的发明的实施例如何可以能够还适应非常复杂的真实情况,因此提出包括直接、返回、枢轴、查找和可选副实体的样本虚拟实体描述符。
[0206] 让我们假设用于特定应用的数据模型包含由以下各项组成的产品订单“条目”的丰富概念:
[0207] —条目的某些性质
[0208] —条目所属的订单的某些性质
[0209] —订单所属的运动的某些性质
[0210] —用于条目执行(如果有的话)的设备的某些性质,具有查找能力(改变EquipementName(设备名称)的值意味着使条目关联到不同的设备,或者如果无效的话,没有设备)
[0211] —EquipmentProperty(设备性质)的某些性质,在用于EquipmentProperty.ID(设备性质.ID)的给定的一组值上枢转
[0212] —EntryExtension(条目扩展)的某些性质,表示被关联到条目的附加应用特定数据的动态地生成的实体
[0213] —EntryPropertyValue(条目属性值)的某些性质,在用于EntryProperty.Name(条目属性.名称)的给定的一组值上枢转。
[0214] 可以如图4的虚拟实体图T6所示地描述此类虚拟实体。
[0215] CRUD界面
[0216] 经由CRUD界面来展示用于访问虚拟实体的访问方法。此类方法包括(在相关时)读取方法和三个写入方法,即创建、读取和删除方法。
[0217] 用于虚拟实体的读取方法
[0218] 在用于虚拟实体的CRUD界面中,虚拟实体上的读取方法被实现为包括虚拟实体的实体上的读取方法的调用。
[0219] 在发明实施例中,用于存储实体的储存库是数据库,优选地是关系数据库。
[0220] 在关系数据库中,通过生成并执行单个查询来实现用于虚拟实体的读取方法。在发明实施例中,这可以通过在内部架构(即,组成架构的基础类)中提供实体描述来实现,所述实体描述具有关于其在数据库中如何持续、即那些字段/表达参考那些表格/视图在外部保持被表示为实体性质的数据的详细信息。
[0221] 有利地,通过经由对关系数据库的单个查询来执行读取方法,实现了读取方面的最大性能的目标。
[0222] 此外,可以实现抽象层级过滤、分类和服务器侧寻呼功能,允许开发者对数据库吞吐量进行微调。
[0223] 读取方法返回虚拟实体实例的集合。在发明实施例中,可以有适应不同应用领域的多个实施方式。
[0224] 例如,在第一实施方式中,可以存在将在使用虚拟实体描述符来写入.NET应用程序时使用的VirtualEntityInstance(虚拟实体实例)对象的.NET标准Collection<>。在本实施方式中,VirtualEntityInstance是在处理聚合实体并实现所述方法以访问虚拟实体实例的架构中定义的类。
[0225] 在第二实施方式中,可以存在能够被直接束缚于Microsoft ObjectDataSources以便在不写入.NET代码的情况下获得表状或表格状图形表示的Microsoft DataSet和/或DataTable对象。
[0226] 在其它实施方式中,可以存在适合于向第三方ASP.NET控制(例如,制图、图表、树)提供数据的其它标准表示。
[0227] 用于虚拟实体的写入方法
[0228] 三个写入方法中的每一个根据存储在虚拟实体描述符中的信息行动。
[0229] 创建和删除方法要求表示要创建或删除的复合对象的单个虚拟实体实例。
[0230] 替代地,在本发明的优选实施例中,编辑方法可能要求复合对象的当前(即,旧的)和期望(即,新的)版本。事实上,编辑作为不止一个部分实体的复合物的虚拟实体可以决定(resolve to)每个部分实体实例的创建、修改或删除。
[0231] 在本优选实施例中,其中编辑方法要求旧的和新的值,可以将创建方法实现为其中“旧”虚拟实体实例性质无效的编辑方法的特殊情况。
[0232] 虚拟实体描述符中的其它属性
[0233] 有利地,可以将虚拟实体描述符中的某些性质标记为只读或隐藏。在特定情况下写入方法可以将此类属性考虑在内,如以下示例所示。
[0234] 交易支持
[0235] 优选地,在聚合写入操作中涉及的实体可以展示支持分布式交易的创建、编辑和删除原子方法。这有利地允许在某些事失败的情况下退回整个交易。用聚合方法对分布式交易进行初始化,或者使用在外部创建的一个。
[0236] 唯一密钥
[0237] 架构中的每个实体展示关于哪组性质组成唯一地识别其实例的密钥的信息。
[0238] 每个实体可以具有一个或多个唯一密钥。在某些情况下,实体可以不具有定义的唯一密钥,在这种情况下,由所有实体性质来组成唯一密钥。
[0239] 可以使用唯一密钥:
[0240] —检索最新实例并在写入之前集成未被包含在部分实体中的性质;
[0241] —用在聚合中涉及的每个实体的删除方法。
[0242] 数据依赖关系
[0243] 某些实体具有来自其它实体的数据依赖关系。这意味着无论在虚拟实体描述符中如何分级组织(父/子)这些实体,写入方法的执行中的中间步骤包括将某些性质值从一个实体拷贝到另一个实体。通常,可以用“依赖关系”属性来标记实体性质,表明其值被其它实体性质的值继承。根据定义,链接性质是依赖性性质。事实上,如果实体A通过性质P来参考实体B,即A.P对应于B.P,则每当B.P的值中发生变化时更新A.P的值。
[0244] 编辑/创建方法
[0245] 在编辑/创建方法中,按顺序处理部分实体,保证遵守数据依赖关系;例如,如果部分实体A从部分实体B获得数据,则将在B之后处理A,用链接性质来表示最常见的情况。
[0246] 参考由描述符定义的部分实体的树:
[0247] —如果用直接链接将子C链接到父F,在F之前处理C。
[0248] —如果用返回或枢转链接将子C链接到父F,则在F之后处理C。
[0249] 在处理部分实体的同时,通常可以执行以下步骤:
[0250] I)在当前交易中支持(enlist)实体实例;
[0251] II)检查部分实体以检验其是否将被修改;
[0252] III)如果其将被修改;
[0253] —从数据库检索最新完整实体实例;
[0254] —进行关于将执行哪个动作的判定(创建/编辑/删除);
[0255] —执行该动作(如果不成功,方法执行停止且交易被退回)。
[0256] IV)将性质值拷贝到其它部分实体(如果有的话)中的依赖性性质。
[0257] 在以下情况下,认为部分实体被修改:
[0258] i)至少一个性质明确地将被修改(即,其旧值不同于新的)或者
[0259] ii)至少一个依赖性性质隐含地将被更新,例如,这通常是链接性质的情况:如果Entity1.Property1(实体1.性质1)被链接到Entity2.Property2(实体2.性质2),Property2(性质2)的值的变化意味着更新Property1(性质1))或者
[0260] iii)部分实体被枢转,并且将创建其副实体之一,例如在这种情况下,还必须创建枢转实体的新实例。
[0261] 将执行哪个动作的判定对于直接链接和返回链接副实体而言是不同的。
[0262] 对于直接链接副实体而言,动作判定如下:
[0263] 如果当前部分实体是根实体,或者被直接链接到其父,则根据其是否已被标记为“查找”,它通过其查找标识符之一或通过其唯一密钥之一来进行检索。当定义了多个标识符时,使用第一非零标识符来检索实体实例。
[0264] 成功的检索意味着实体实例已经存在:其将在数据库上被更新,除非其为未被标记为“可更新”的查找实体。不成功的检索意味着实体实例是新的:其将在数据库上创建,除非其为未被标记为“可创建”的查找实体。
[0265] 删除并重新创建未为之定义唯一密钥的实体的实例;常见的情况是表示其它实体之间的关联或换言之实现多对多关系的实体。
[0266] 最后,如果查找实体中的所有查找标识符是无效的,这意味着调用者希望将其与其父分离;将不对数据库采取行动,并且在参考实体中,链接性质将被设置为无效。
[0267] 对于返回链接副实体而言,动作判定如下。
[0268] 如果当前部分实体被返回链接到其父,则进行通过其唯一密钥对其进行检索的尝试。如果检索尝试不成功,则创建实例。否则,检查其“可访问”性质以判定需要什么动作。当性质是可见的(即未被隐藏)且可编辑的(即不是只读的)或从另一部分实体获取(作为依赖性性质)时,其是“可访问的”。如果所有可访问性质是无效的,则这意味着调用者的意图是删除该实例,因此其将被从数据库去除,否则它用新值进行更新。
[0269] 如上文所解释的,作为一组独立返回链接实体来处理枢转实体,每个枢轴值一个。这意味着在内部复制所有包括的性质和副实体以便具有用于枢轴值集合中的每个值的一个拷贝。
[0270] 编辑示例
[0271] 在示例中,使用以下符号来举例说明对部分实体采取的动作:
[0272]
[0273] 表8
[0274] 示例7:简单直接链接副实体的编辑
[0275] 在本示例中,让我们假设实体A具有如图5的虚拟实体图T8所示的直接链接副实体B。
[0276] 让我们假设从实体A获取性质a1、a2、a3和a_pk并从实体B获取b1、b2和b_pk(a_pk和b_pk是用于两个实体的唯一密钥)。在典型的应用中,可以将a_pk和b_pk标记为“隐藏”。部分实体处理顺序是:首先实体B然后实体A。
[0277] 样本情况7.1:创建
[0278] 在本样本情况中,如表9所示,在新数据中指定值,提供用于性质a1、a2、a3、b1和b2的新值。先前的值全部是无效的,并且两个主密钥也是无效的。
[0279]
[0280] 表9
[0281] 如图5的虚拟实体图T9所示,聚合编辑方法创建实体B的新实例和对其进行参考的实体A的新实例。
[0282] 样本情况7.2:编辑两个部分实体
[0283] 在此样本情况下,如表10的粗体格式所示,对a1、a2、a3、b1和b2给定新的值[0284]
[0285] 表10
[0286] 还如图5的虚拟实体图T10所示地更新两个实体B和A。
[0287] 样本情况7.3:仅编辑副实体
[0288] 在此样本的情况下,如表11的粗体格式所示地对b1和b2给定新的值。
[0289]
[0290] 表11
[0291] 还如图5的虚拟实体图T11所示地仅更新实体B。
[0292] 样本情况7.4:仅编辑主实体
[0293] 在此样本情况下,对a1、a2和a3给定新的值。
[0294]
[0295] 表12
[0296] 还如图5的图T12所示地仅更新实体A。
[0297] 示例8:直接链接查找副实体的编辑
[0298] 本示例与示例7的不同之处在于如图5的虚拟实体图T13所示地将实体B标记为“查找”(不可创建,不可更新),并宣布性质b1是其查找标识符。
[0299] 由于实体B被定义为不可创建或不可编辑,所以不允许对其进行写操作,这意味着根据定义,b2和b_pk是只读的。部分实体处理顺序再次地是首先实体B然后实体A。
[0300] 样本情况8.1:创建
[0301] 针对a1、a2、a3和b1指定新的值。与示例7的差别是由于b1是B的查找标识符,所以使用给定值作为检索B的该特定实例的密钥。
[0302]
[0303] 表13
[0304] 还如图6的虚拟实体图T14所示,创建参考具有b1=“b_id1”的实体B的实例的实体A的新实例。
[0305] 如果不存在具有b1=“b_id1”的实体B的实例,则该方法失败,因为B不是“可创建的”,否则其将尝试创建新实例。
[0306] 样本情况8.2:编辑(或更新)
[0307] 在本样本情况下,对a1、a2、a3和b1给定新值。因为b1是B的标识符,所以改变其值意味着使A参考B的不同实例,这与示例7所示的相差悬殊。
[0308]
[0309] 表14
[0310] 实体A被更新并链接到实体B的另一实例,还如图6的虚拟实体图T15所示的具有b1=“b_id2”的一个。
[0311] 样本情况8.3:解开链接
[0312] 在此样本情况下,对b1给定无效值。这意味着实体A不参考实体B的任何实例。
[0313]
[0314] 表15
[0315] 还如图6的图T15所示,通过将实体A的到实体B的链接设置为无效更新实体A;当然,仍存在实体B的先前链接实例。
[0316] 示例9:返回链接副实体的编辑
[0317] 本示例与示例7的不同之处在于实体B被返回链接到实体A。应注意的是一般不推荐返回链接,因为其改变结果基数(cardinality)。然而,在一对一关系的情况下允许并意图使用它们。
[0318] 部分实体处理顺序是:首先实体A然后实体B,这相对于示例7和8是相反的顺序。
[0319] 样本情况9.1:创建
[0320] 对a1、a2、a3、b1和b2指定新的值。先前的值全部是无效的,并且两个唯一密钥也是无效的。
[0321]
[0322] 表16
[0323] 创建实体A的新实例,然后还如图6的虚拟实体图T18所示地创建对其进行参考的实体B的新实例。
[0324] 样本情况9.2:编辑两个部分实体
[0325] 在本样本情况下,对a1、a2、a3、b1和b2给定新值。
[0326]
[0327] 表17
[0328] 还如图6的虚拟实体图T19所示,两个实体A和B被更新。
[0329] 样本情况9.3:删除副实体
[0330] 在此样本情况下,对b1和b2给定无效值,其全部是用于B的“可访问”值。
[0331]
[0332] 表17
[0333] 还如在图6的虚拟实体图T20所示,从数据库中移除B的这个实例,即具有b_pk=51的一个。
[0334] 示例10:编辑枢轴链接副实体
[0335] 在本示例中,主实体A具有枢轴链接副实体B,其具有返回链接副实体C,如图7的虚拟实体图T21所示的。从实体A获取性质a1、a2、a3和a_pk,从实体B获取性质b1和b_pk,从实体C获取性质c1、c2和c_pk。用于副实体B的枢轴值是X和Y。
[0336] 部分实体处理顺序是:首先主实体A,然后副实体B,然后副实体C。
[0337] 样本情况10.1:创建
[0338] 在此样本情况下,对a1、a2、a3、Xb1、Xc1、Xc2、Yb1、Yc1和Yc2指定新值。先前的值全部是无效的,并且所有唯一密钥也是无效的。
[0339]
[0340] 表18
[0341] 如下创建用于部分实体A、B和C的新实例:首先是A的新实例,然后是对其进行参考的B的两个新实例(一个用于枢轴值X且一个用于枢轴值Y),最后是C的两个新实例,每个参考其“父”B实例,如图7的虚拟实体图T22所示。
[0342] 样本情况10.2:部分创建
[0343] 在此样本情况下,对a1、a2、a3、Xb1、Xc1和Xc2指定新值。先前的值全部是无效的,并且所有唯一密钥也是无效的。
[0344]
[0345] 表19
[0346] 如下创建新实例:首先是实体A的新实例,然后是对其进行参考的实体B的新实例(对于枢轴值X而言)且最后是对其“父”实体B实例进行参考的实体C的新实例,还如图7的虚拟实体图T23所示。
[0347] 样本情况10.3:部分编辑
[0348] 在此样本情况下,对性质Xc1和Xc2给定新值。
[0349]
[0350] 表20
[0351] 只需要更新对应于枢轴值X的实体C的实例,还如图7的虚拟实体图T24所示。
[0352] 删除方法
[0353] 除主根实体之外,仅返回和枢轴链接部分实体受到聚合删除方法的影响。
[0354] 再次地,按照从数据依赖关系导出的顺序来处理部分实体,其被相对于编辑方法情况反向:
[0355] —如果用返回或枢转链接将子实体C链接到父实体F,则在父实体F之前处理子实体C。
[0356] —如果用直接链接将子实体C链接到父实体F,则子实体C及其副实体不受删除的影响。
[0357] 示例11:删除直接链接级联实体
[0358] 如图8的虚拟实体图T25所示,删除由级联直接链接实体组成的虚拟实体意图仅删除根实体实例,在本示例中为实体A,如图8的虚拟实体图T26所示。
[0359] 示例12:删除返回链接实体
[0360] 在返回链接实体的被参考实体之前将其删除。例如,对于图8的虚拟实体图T27所示的示例中的虚拟实体而言,首先删除实体B,然后是实体A,如图8的虚拟实体图T28所示。
[0361] 插件
[0362] 在本发明的实施例中,可以定义一个或多个操作插件以便对数据访问方法的行为进行定制。插件是实现定制动作的外部软件模块
[0363] 可以针对被关联到一个或多个实体方法的一个或多个实体和虚拟实体来定义插件。
[0364] 图9是示意性地举例说明根据提出的发明的示例性实施例的用于实体操作的插件执行的示例的流程图。
[0365] 可以根据三种方式将插件分配给实体操作。
[0366] 根据第一方式,将全局插件分配给给定实体的所有实例上的特定操作的执行。
[0367] 根据第二方式,将上下文插件分配给所有实体实例上的操作的执行,其上下文、即所有实体展示的特定性质与给定值匹配。
[0368] 根据第三方式,将实例插件分配给特定实例上的操作的执行。
[0369] 如图9的流程图中所示,实例插件超越上下文插件,上下文插件又超越全局插件。
[0370] 此外,在发明实施例中,相对于默认操作,可以定义具有不同作用类型的插件。
[0371] 根据第一作用类型,可以定义作为在默认操作之前执行的插件的“前”插件。
[0372] 根据第二作用类型,可以定义作为代替默认操作执行的插件的“跳过”插件。
[0373] 根据第三作用类型,可以定义作为在默认操作之后执行的插件的“后”插件。
[0374] 可以以完全独立的方式来配置前、跳过和后插件,即,其不是相互排斥的,还如图9的流程图所示。
[0375] 在发明实施例中,在架构与外部插件之间交换的数据可以方便地包括流程控制参数,其可以由插件来设置以影响执行流程。
[0376] 有利地,用定义插件的可能性,可以以容易且灵活的方式针对特定解决方案的需要定制对数据的任何操作。
[0377] 示例13:“跳过”插件
[0378] 在本示例中,让我们假设针对Entry.Create() 方法定义称为“CustomEntryCreation(定制条目创建)”的全局“跳过”插件。用此类插件,对实体Entry(条目)的任何实例上的Creat()方法的每个明示或暗示(即聚合写)调用决定CustomEntryCreation(定制条目创建)插件,使得默认实现被忽视。
[0379] 示例14:“后”插件
[0380] 在本示例中,让我们假设称为“EntryCreationTrack(条目创建跟踪)”的上下文“后”插件被关联到用于具有“上下文”性质的给定值的实例的Entry.Create()方法。例如,上下文性质可以识别例如由特定用户或由特定应用程序页面创建的实体。此类“EntryCreationTrack(条目创建跟踪)”插件随后在每次已经在指定上下文中创建了条目时被调用。其目的可以是操作时间、实例数据和结果的跟踪。
[0381] 示例15:“前”插件(“pre”plugin)
[0382] 在本示例中,让我们假设针对Entry.Create()方法定义称为“EntryValidation(条目确认)”的全局“前”插件。其目的是在条目实际上被写入数据库之前检验条目的有效性。如果数据不是有效的,则可以使得EntryValidation(条目确认)插件能够中断该操作并报告警告。
[0383] 动态实体的生成
[0384] DAL层级上的实体可以是标准或定制的。标准实体也称为产品或基本实体,并且是具有一般有效性的库实体。例如,在MES领域中,可以展示在组件中组织的一组标准MES实体以处理最常见的业务对象。
[0385] 通常,标准实体只能覆盖特定系统数据模型的一部分。
[0386] 常常要求在数据层级中集成通常被存储在定制数据库表格中的其它信息。
[0387] 有利地,在发明实施例中提供了定义针对特定定制应用生成的定制实体(在这里称为动态实体)的可能性。
[0388] 方便地,此类动态实体生成功能允许创建具有标准实体的相同界面的定制业务对象。
[0389] 第一个优点是“外部”界面是相同的,即动态地生成的实体能够被开发者及其它软件模块和工具用作标准实体。
[0390] 第二个优点是“内部”界面也是相同的,即能够在虚拟实体描述符中使用动态地生成的实体,如上文在示例6中所述。
[0391] 通过定义动态实体描述符、保持关于要生成的实体的信息的对象来获得动态实体生成。
[0392] 图10是示意性地举例说明根据本发明的示例性实施例的包含在动态实体描述符DED的结构中的信息的类型的图示。
[0393] 由动态实体描述符DED保持的信息是以下各项:
[0394] —关于在数据访问层中如何表示实体的信息ERI,例如,类名、性质名和类型、特定属性CI;
[0395] —关于在储存库DB中如何存储实体数据的信息ESI,例如数据库表格、视图、字段/表达式。此类信息被用来自动地实现组成架构要执行读取操作所需的内部界面的所有方法。
[0396] —关于将如何对实体进行写入的信息EWI,即调用哪些外部提供者WOP以执行写操作。写提供者可以选自架构中可用的通用提供者,例如对数据库表格执行INSERT(插入)、UPDATE(更新)和DELETE(删除)的简单提供者,以及特别针对特定实体开发的定制提供者。
[0397] 除上述本发明的实施例之外,本领域的技术人员将能够得出多种其它布置和步骤,其(如果在本文中未明确地描述)无论如何落在所附权利要求的范围内。
[0398] 所使用的缩写的列表:
[0399] BL 业务逻辑
[0400] DAL 数据访问层
[0401] DB 数据库
[0402] CRUD 创建读取更新删除
[0403] MES 制造执行系统
[0404] XML 可扩展标记语言
相关专利内容
标题 发布/更新时间 阅读量
访问控制 2020-05-12 222
访问装置以及访问程序 2020-05-12 115
控制对访问对象的访问 2020-05-12 387
联盟访问 2020-05-11 978
访问WEB服务 2020-05-13 923
联盟访问 2020-05-11 480
数据库访问 2020-05-12 538
访问控制 2020-05-11 191
访问口 2020-05-11 271
硬盘访问器 2020-05-12 394
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈