专利名称:一致地信令状态变更的制作方法
一致地信令状态变更背景在计算机化系统内使用的应用程序通常包括出于各种不同的原因而相互依赖的 多个不同的组件或模块。例如,简单的计算器应用程序可以包括输出显示组件,该输出显示 组件在它标识到从计算模块输出的一个或多个值的任何时刻立即刷新(即,显示新输出)。 计算模块进而可被配置成在它接收到来自一个或多个输入组件的一个或多个数字和函数 输入的任何时刻执行计算。由此,显示组件将不仅依赖于计算模块,而且还最终依赖于计算 器应用程序中的各个输入组件中的每一个。存在可在软件级配置这些依赖关系的多种不同的方式。例如,上文所描述的计算 器模块可以“发布”其计算出的值,以使得正在“监听”该值的任何其他显示组件将在值被 发布时标识该值并对其执行某一动作。为标识何时发布值,显示组件进而可以建立监听程 序(例如,建立“事件”),该监听程序最终标识和/或接收已发布的值。在其他情况下,计 算器模块本身可以被配置成将任何新计算出的值传递(例如,“信令”)给向计算器模块注 册的特定其他组件。由此,可以理解,存在用于将数据从一个软件组件传递到另一个软件组 件的多种“推”和“拉”样式的机制。由此,在程序员想要创建模块或组件之间的依赖关系的任何时刻,程序员通常将 需要在代码中编写依赖关系,并且有时甚至为该关系创建监听程序。例如,程序员可以编写 一个监听程序,该监听程序不仅在一个组件发布值时检索该值,而且还将该值发送到依赖 关系链中的另一个组件。程序员也可以或另选地编写其他逻辑,由此组件只在满足了某种 特定条件时(例如,值具有特定大小)向上发送值。结果,可以理解,组件链中的每一监听 程序都可以按不同的方式,并以不同的速度来处理值。尽管将逻辑写入到每一监听程序中的能力可以提供某种编程灵活性,但是,它也 将会导致过分复杂的依赖关系链,和/或难以保证其准确性。例如,复杂依赖关系链会具有 许多不同的监听程序,每一监听程序都有效地以不同的方式,并以不同速率来响应一个或 多个源节点中的相同变更。这会导致依赖关系链中的后续组件的竞争条件。具体而言,依 赖于从同一个源接收到值的两个组件的依赖子组件最终可以处理来自一个父组件的已正 确地更新的值,但是,使用过时的值来再次执行。或者,依赖子组件最终可能由于很有可能 永远不会发生的条件而无限地挂起。这可能沿着依赖关系链具有更进一步的连锁反应。除前面的内容之外,在常规系统的情况下,甚至可以在用于接收信息的更直接的 路线可能是优选的情况下使用软件组件之间的相同依赖关系。例如,一个依赖关系链可能 涉及从源节点A,到中间节点C,然后到最终节点D的依赖关系。然而,在其他情况下,节点 A可能只需要来自最终节点D的值。例如,在第二执行上下文中,最终节点D可能只需知道 源节点A已经变更,而不一定立即需要源节点A的值。在大多数情况下,甚至第二执行上下 文仍将涉及将变更的实际值从A中继到C到D,即使D只需知道A已经变更。在较长的依赖 关系链中,特别是涉及若干不同条件的依赖关系链,仅仅对于最终节点D发现源节点A已经 变更将会有较大的、不必要的延迟。用于克服这些问题的某些常规机制涉及简单地将频繁刷新速率编码到不同的监听程序中的每一个中。虽然在某些情况下有效,但是,可以理解,这在计算上是昂贵的且没 有必要,特别是在可能涉及大量监听程序的情况下。例如,依赖关系链中的某些底层源组件 可以经常变更,而其他底层组件可能很少或不经常变更。此外,某些其他组件甚至可能不在 特定输出中涉及,并因此费力地传递(并计算)这些最终节点处的值将尤其没有必要。例 如,电子表格上的只表示最终值但是由于某种原因当前没有显示在显示屏幕上的单元格, 可能直到这些单元格在视图内才需要更新。因此,均码(one-size fits all)方法通常可以是不必要的。此外,在当前的系统 中往往充斥着低效,因为常常有依赖关系被注册两次的情况,还因为很少有上游监听程序 一定在其他下游监听程序之前处理某些数据的保证。尽管这些类型的问题可能对于少数不 经常变更的组件不成问题,但是,这些类型的问题可能不必要地减缓或挂起具有大量不断 变更的显示的数据(例如,处理股票行情数据)的系统。此外,这样的问题还可能导致无响 应组件,或其他不必要的处理延迟。因此,存在可以解决的与报告复杂软件依赖关系中的值变更相关联的多个困难。简要概述本发明的实现提供确保用于传递、报告和/或以其他方式处理复杂软件依赖关系 链中的状态/值变更的同步方法的系统、方法,以及计算机程序产品。具体而言,本发明的 实现包括二阶段方法,其中系统建立对应于软件组件的依赖关系链的节点图,并且只在信 令所有节点之后才调用节点图中的所有监听程序。由此,并且由于监听程序可以按照依赖 关系链次序来调用,因此本发明的实现可以确保所有监听程序有效地基于相关源组件的相 同状态,并按适当次序来接收值,由此确保一致性。例如,根据本发明的一实现的用于处理依赖关系链中一个或多个值的一致集合的 方法可以涉及创建对应于多个组件的多个节点,这些组件包括在依赖关系链中次序排序的 一个或多个源组件和一个或多个依赖组件。该方法还可以涉及对于每一个节点,将二进制 指示符设为指示一个或多个源组件包括初始状态的第一设置。此外,该方法还可以涉及在 标识对一个或多个源组件中的后续状态的变更之后,将每一个节点的每一个二进制指示符 都设为第二设置。此外,该方法还可以涉及调用已经向已创建的多个节点注册的一个或多 个监听程序。在此情况下,一个或多个监听程序被同步,以基于一个或多个源组件中的后续 状态来执行。此外,根据本发明的一实现的用于只基于一组有保证的值来创建和更新存储器中 数据结构的另一种方法可以涉及创建初始节点图。初始节点图对应于多个组件,这些组件 包括依赖于一个或多个源组件的一个或多个依赖组件。在此情况下,初始节点图中的每一 个节点都被设为第一设置。该方法还可以涉及在标识一个或多个源组件已变更为已更新的 值时,高速缓存已更新的值,并启动向初始节点图注册的所有监听程序以基于已更新的值 来执行处理。此外,该方法还可以涉及在所有已启动的监听程序都已经完成基于已更新的 值的处理之后丢弃初始节点图。此外,该方法还可以涉及基于对一个或多个源组件的一个 或多个后续变更来创建后续节点图。提供本概述是为了以简化的形式介绍将在以下详细描述中进一步描述的一些概 念。本概述不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定 所要求保护的主题的范围。
本发明的附加特征和优点将在以下描述中叙述,且其一部分根据本说明书将是显 而易见的,或可通过对本发明的实践来获知。本发明的特征和优点可通过在所附权利要求 书中特别指出的工具和组合来实现和获得。本发明的这些和其他特征将通过以下描述和所 附权利要求书变得更加显而易见,或可通过对下文中所述的本发明的实践来领会。附图简述为了描述可获得本发明的上述和其它优点和特征的方式,将通过参考附图中示出 的本发明的具体实施方式
来呈现以上简要描述的本发明的更具体描述。可以理解,这些附 图仅描述本发明的典型实施例,从而不被认为是对其范围的限制,本发明将通过使用附图 用附加特征和细节来描述和说明,在附图中图IA示出了其中根据本发明的一实现的信令系统标识依赖关系链中的节点的概 略示意图;图IB示出了其中根据本发明的一实现的信令系统信令依赖关系链中的每一个节 点的概略示意图;图IC示出了其中根据本发明的一实现的信令系统在信令依赖关系链中的各节点 之后调用监听程序的概略示意图;图2示出了根据本发明的一实现的用于确保依赖关系链中的依赖节点之间的一 致性的方法的流程图;以及图3示出了根据本发明的一实现的用于创建不同的依赖关系链结构以确保节点 之间的一致性的的方法的流程图。详细描述本发明的各个实现涉及确保用于传递、报告和/或以其他方式处理复杂软件依赖 关系链中的状态/值变更的同步方法的系统、方法,以及计算机程序产品。具体而言,本发 明的实现包括二阶段方法,其中,系统建立对应于软件组件的依赖关系链的节点图,并且只 有在信令所有节点之后才调用节点图中的所有监听程序。由此,并且由于监听程序可以按 照依赖关系链次序来调用,因此本发明的各个实现可以确保所有监听程序有效地基于相关 源组件的相同状态,并按适当次序来接收值,由此确保一致性。由此处更加全面地理解的,可以至少部分地使用二阶段通知,以及至多一次通知 传递来实现这些及其他优点。此外,如此处所描述的有向通知图按依赖次序提供状态变更 通知(如图形状所示)。具体而言,状态变更的通知(而不必传递已变更的值)只在程序可 以正确地确定所有过时的节点都是过时的之后才发生。由此,对于给定节点,通知只发生一 次(解决了循环)。结果,本发明的这些及其他方面可以被理解为提供有关依赖状态的合理 假设,并可以有助于在多线程环境中维护系统的保证。图IA示出了概略示意图,其中信令系统100为依赖关系链中的依赖软件组件的至 少一个集合准备节点图,以便确保一致的信令。例如,图IA示出系统100包括组件A 110、 B 120, C 130, D 140, E 150,以及F 160。此外,图IA还示出组件A 110依赖于组件B 120 和组件C,而组件B 120依赖于组件D140,且组件C依赖于组件E 150。此外,图IA还示出 组件D 140依赖于组件F 160,并且组件D以及组件E有条件地彼此相关。例如,组件E可 能只有在由组件D产生的值具有特定大小或长度等的情况下才计算值。由此,软件组件A-F的这一集合通常可以被认为形成“依赖关系链”,该依赖关系链包括多个源节点、依赖节点,和/或最终节点。在此特定示例中,组件F 160本质上可以被 理解为依赖关系链中的源节点。相反,组件B、C、D,以及E本质上可以被理解为中间节点, 而组件A可以被理解为依赖关系链中的依赖节点。然而,当然还可以理解,依赖关系链中的任何给定节点都可以被认为是相对于依 赖关系链中的另一个节点的依赖节点、中间节点或源节点。例如,组件D 140可以被认为是 对于组件B 120和/或组件E 150的源节点。类似地,组件E 150也可以被认为是对于组 件C 130的源节点,等等。此外,还可以理解,所示出的依赖关系链可取决于各种执行上下 文在几乎任何时刻延长、缩短,以及变得更复杂或更容易。例如,组件A可以包括用于在一 个计算中涉及组件B-F的一个特定计算的输出模块,但在其他计算中涉及更多或更少的这 样的组件节点。图IA示出系统100可以准备对应于(或以其他方式表示)软件组件的依赖关系链 的节点
图113。一般而言,节点图113包括一组具有链接节点(110a、120a、130a、140a、150a 以及160a)的存储器中数据结构,这些节点基于相关软件组件(例如,110、120、130、140、 150,160)中的状态变更来创建和丢弃。例如,在请求通过组件A进行某种处理时,处理模块 105为该特定请求遍历依赖关系链中的每一个软件组件110、120、130、140、150、160,并准 备对应的节点图113。具体而言,图IA示出处理模块105准备包括节点110a、120a、130a、 140a、150a,以及160a的节点图113,而这些节点分别对应于组件110、120、130、140、150,以 及 160。除节点图113之外,图IA还示出处理模块105还在监听程序注册表170中注册每 一个软件组件的每一个不同的监听程序。例如,在遍历各个组件110、120、130等以标识依 赖关系时,每一组件也可以提供特定监听程序的指示。然后,处理模块105可以在标识到时 并由此按依赖关系链中的适当或确切次序在监听程序注册表中注册每一个已标识的监听 程序次序。例如,图IA示出组件B 120,D 145,以及E 155各自分别使用诸如监听程序B 125,D 145,以及E 155之类的监听程序。因此,图IA示出监听程序注册表170包括按相对 依赖关系链次序的监听程序D 145,监听程序E 155,以及监听程序B 125的表示。在任何情况下,系统100都可以创建和丢弃节点图113,以反映和管理软件组件状 态的变更。例如,当源节点F等于一个值(例如,“0”或“状态1” 165)时,处理模块105可 能已经创建此特定节点图113。当源节点F从第一状态变更为另一个后续状态或值(例如, 从“0”到“10”-未示出)时,系统100(例如,经由处理模块105)然后可以更新节点图113, 以反映已经发生变更这一事实。然后,系统100可以使节点图113保持在此特定状态,直到 诸如所有组件都有机会完成任何所需处理之类的时刻。一旦各种组件110、120、130完成处 理源节点中的最初导致对节点图113的变更的变更,处理模块105然后就可以丢弃节点图 113,并在必要时利用新的这样的节点图再次开始。结果,在组件110、120、130正在处理先 前的变更(例如,从“0”变为“10”)时,系统100基本上禁止对应的节点接收新的状态更 新。软件组件中的处理的一致性和单一性至少部分地使用根据本发明的各个实现的 一个或多个信令特征来启用。例如,图IA示出节点图113中的各个节点110a、120a等中的 每一个都包括(或备有)二进制指示符,如二进制指示符117a、127a、137a、147a、157a和 167a。在此特定图示中,二进制指示符被示为“ + ”号,以标识特定的初始或第一设置。具体而言,所示出的情况下的“ + ”号意味着依赖关系链所基于的给定软件源组件(例如,组件 160,状态165)的、在已经处理任何变更之前的默认值。由此,并且如此处更加全面地理解的,节点图113可以被设为二进制指示符中的 变更链接到原始源节点的特定状态。例如,只要接收到组件F 160的状态变更(S卩,消息 180),系统100就可以高速缓存新的值(例如,从“0”变为“ 10”),并自动将新的值链接到 节点图113,而不管源组件F 160可能发生的任何其他后续变更。此外,系统100还可以在 需要时将对源组件(例如,组件F 160)的值的任何后续变更链接到新的(或刷新的)节点 图(未示出)。由此,“二进制”指示符只能变为一个其他值,并且如此处所讨论的,只变更一 次。由此,当处理模块105标识特定软件源组件(例如,160)的值的变更时,二进制指示符 117a、127a等只更新一次以反映该变更。例如,图IA示出处理模块105接收指示组件F 160 已经被更新的消息180。如图IB所示,处理模块105然后通过不同的节点110a,120a等中 的每一个来发送信号185。信号185进而包括将二进制指示符从“ + ”状态变更为“-”状态 的记法,并由此简单地将二进制指示符上的初始设置更新为后续设置。此外,信号185基本上按照从源节点F 160a开始的依赖关系链次序发送。例如, 图IB示出信号185首先被发送到节点F 160a,然后被发送到节点D 140a和E 150a等等, 这导致二进制指示符从设置167a、157a,以及147a (即,“ +,,)分别变为设置167b、157b,以 及147b(即,“-”)。最终,信号185将经过每一依赖关系,直到节点图113中的所有节点都 接收到信号185。在大多数情况下,每一个节点都将只接收信号一次。然而,本发明的各个 实现可以适应其中节点由于任何其他原因接收信号的重复(或任何其他信号)的情况,因 为每一个二进制指示符变更“至多一次”。具体而言,由于每一个二进制指示符147只可变更一次(即,“至多一次”),因此 没有其他信号(或信号的重复)可以变更已变更的/已更新的节点的二进制指示符。艮口, 在具体引用这些附图中所使用的术语的情况下,一旦被设为所示出的“_”号,则给定二进制 指示符不能变回到“ + ”号。由此,所示出的节点图113的信令路径甚至在某些节点无意中 来回循环特定信号185的情况下也将仍然起作用。当然,除了二进制指示符的“至多一次” 变更的配置以外,节点本身可以被配置成避免这些种类的问题。例如,在至少一个实现中, 节点图113中的每一个节点在创建时被配置成不具有到另一个节点的反向通道。由此,尽 管节点F 160a将信号185至少中继到节点D 140a,但是节点F 140a不能接受来自节点D 140a的返回信号。系统100还确保直到给定节点图中的所有节点都已经更新(经由信号185),该特 定依赖关系链中的处理才会发生。例如,在至少一个实现中,系统100通过保持对监听程序 125,145或155的调用来确保此一致性,直到在所有二进制指示符都已经被设置和更新之 后,或直到在信号185已经到达节点图113中的所有节点至少一次之后。因此,在这样的实 现中,节点图的初始创建(例如,图1A)将由于仅仅发现监听程序125、145以及155而不会 导致任何处理。甚至在系统100接收到对组件F的更新(例如,消息180)时,系统100也 不会调用监听程序125、145155中的任一个,直到二进制指示符被更新以反映源节点处的 初始变更。除在更新所有二进制指示符之后调用监听程序之外,系统100还可以通过按特定
9次序调用监听程序来增强一致性。例如,图1A-1C示出监听程序注册表170基本上以处理 模块105标识监听程序125、145以及145的次序存储对这些监听程序的引用。具体而言, 图1A-1C示出监听程序注册表170存储次序是首先监听程序D 145、监听程序E 155,以及 监听程序B 125的这些特定监听程序的次序。结果,当处理模块105最终调用这些特定监听 程序时,处理模块105只按近似的处理次序来这样做。例如,图IC示出处理模块105通过 节点图113按近似的依赖关系链次序来应用消息190,以使得对应于节点D 140a和E 150a 的监听程序D 145和E 155在对应于节点B 120a的监听程序B 125之前被调用。当系统100调用这些监听程序中的每一个时,每一个对应的软件组件都可以基于 源组件处的值变更来执行处理。例如,一旦监听程序145被调用,软件组件D 140就可以对 与此节点图113相关联的高速缓存的值(例如,源组件F160的当前值)执行任何处理。一 旦监听程序E 155和B 125被调用,组件E 150和B 120就可以检索已经从节点D处理和 /或提供的任何值,该值基于来自消息180的对组件F的最近更新。可以理解,由此系统100不仅对对每一监听程序的调用进行排序,而且还对沿着 依赖关系链的连续值的处理进行排序。这显著地增加特定软件组件从另一个源/中间节点 中检索到的每一个值只基于已经处理的最新值的可能性。此外,一旦已经基于组件F 160 的所分配的状态调用了所有监听程序,并且所有处理都已经完成,则处理模块150然后就 丢弃节点图113。如果需要的话,系统100还可以准备对应于组件F中的又一个变更的另一 个节点图。因此,图1A、1B和IC提供了一个或多个示意图或组件,其用于确保依赖关系链中 的组件基本上以正确的次序有效地一次只处理源节点中的一个状态变更。这可以提供多个 重要保证,并可以缓解或以其他方式消除有时由于这些特定情况下的竞争条件(在同一个 链中的当前值和旧值的处理之间)而引发的顾虑。除了上述内容之外,本发明的各实现还可以按照包括用于实现特定结果的一个或 多个动作的方法来描述。例如,图2示出了处理依赖关系链中的一个或多个值的一致集合 的方法的流程图。此外,图3还示出了只基于一组有保证的值来创建和更新表示依赖关系 链的存储器中数据结构的附加或替换方法。图2和3的流程图中的动作在下文中参考图 1A-1C的组件和示意图来描述。例如,图2示出处理依赖关系链中一个或多个值的一致集合的方法可以包括标识 依赖关系链中的节点的动作200。动作200包括创建对应于多个组件的多个节点,这些组件 包括在依赖关系链中排序的一个或多个源组件和一个或多个依赖组件。例如,处理模块105 从组件A 110接收处理请求,并遍历对应的依赖关系链以标识组件A所依赖的每一个不同 的组件。然后,处理模块105然后创建对应的节点图113数据结构,该数据结构包括依赖关 系链中的与已标识的A所依赖的组件相关的一个或多个节点。图2还示出该方法可以包括为每一个节点设置二进制指示符的动作210。动作210 包括对于每一个节点,将二进制指示符设为指示一个或多个源组件包括初始状态的第一设 置。例如,图IA示出处理模块105为节点图113中的每一个节点创建并设置二进制指示符 117a、127a、137a、147a、157a和167a。在一个实现中,该特定二进制指示符被设为初始状态 (165),该初始状态(165)有效地阐明一个或多个源组件(例如,组件F 160)的值从建立节 点图以来尚未变更。
此外,图2还示出该方法可以包括在源节点变更之后将所有二进制指示符都设为 第二设置的动作220。动作220包括在标识对一个或多个源组件中的后续状态的变更之后, 将每一个节点的每一个二进制指示符都设为第二设置。例如,如图IB所示,一旦处理模块 105标识对节点F的变更,处理模块105就立即开始信令该变更,如通过首先将节点图113 中的每一个二进制指示符都变更为替换、后续表示。具体而言,图IB示出处理模块105向 节点图113中的每一个节点传递信号185,以便将“ + ”设置变更为“_”。此外,图2还示出该方法可以包括调用依赖关系链中的所有监听程序的动作230。 动作230包括调用已经向已创建的多个节点注册的一个或多个监听程序,其中该一个或多 个监听程序被同步以基于一个或多个源组件中的后续状态来执行。例如,既然每一个二进 制指示符都已经变为减号,图IC示出系统100调用每一个组件的每一监听程序,并按照最 初在依赖关系链中标识这些监听程序的次序(例如,从最接近源节点向上至最接近最终节 点)来这样做。例如,图IC示出系统100首先调用监听程序D 145,然后调用监听程序E 155,以及监听程序B 125,等等。除前面的内容之外,图3还示出根据本发明的用于只基于一组有保证的值来生成 依赖关系链的附加或替换方法可以包括基于第一状态来创建节点图的动作300。动作300 包括创建对应于包括依赖于一个或多个源组件的一个或多个依赖组件的多个组件的初始 节点图,其中初始节点图中的每一个节点都被设为第一设置。例如,图IA示出处理模块 105在标识处理请求180之后遍历组件110、120、130、140、150、160,以创建包括对应的节点 110a、120a等的节点图113。在此情况下,处理模块105还将每一个节点中的二进制指示符 (117a、127a等)设为初始状态(即,“ + ”),以指示节点图113基于源节点组件F 160的初 始状态(165)。图3还示出该方法可以包括在已经复制状态变更之后调用所有监听程序的动作 310。动作310包括,在标识一个或多个源组件已经变为已更新的值之后,高速缓存已更新 的值并启动向初始节点图注册的所有监听程序,以基于已更新的值来执行处理。例如,图IB 和IC示出在接收到用于更新组件节点F的消息180之后,处理模块105以替换指定变更所 有二进制指示符,如节点图113中的147b、157b、167b (即,变为“-”),并且还调用注册表 170中的所有监听程序。此外,图3还示出该方法可以包括丢弃节点图的动作320。动作320包括在所有已 启动的监听程序都已经完成基于已更新的值的处理之后丢弃初始节点图。例如,在如图3 所示的每一监听程序都已经访问了对节点图113可用的最新近的值之后,处理模块105丢 弃节点图113。由于不同的二进制指示符147b、157b等中的每一个都只能变更一次,因此没 有其他对不同的组件或节点的后续变更可由任一个其他被调用的监听程序复制和处理。由 此,系统100丢弃依赖关系节点图113。此外,图3还示出该方法可以包括基于已更新的状态来创建新节点图的动作330。 动作330包括基于对一个或多个源组件的一个或多个后续变更来创建后续节点图。由此, 例如,在组件A 110接收到新的处理请求时,处理模块105然后可以再次遍历涉及该特定 处理请求的依赖关系链的集合,并标识涉及新节点图(未示出)的新的节点集合。如同节 点图113,虽然基于对对应的源节点的更新近的变更,但该新节点图也将是存储器中数据结 构。具体而言,节点图可以包括如图IA所示的相同表示,但是也可以包括不同的组件或节点,因为执行上下文可能不同,并可能具有不同的依赖关系。可以理解,该新节点图和新依赖关系链的创建可按需不断刷新,重新创建并丢弃。 在任一种情况下,本发明的各实现由此确保在特定节点图上下文中,源节点值变更在整个 依赖关系链中只被以一致的方式处理一次。因此,本发明的各实现甚至在软件组件的非常 复杂的依赖关系链中也可以确保值处理的高度准确性和一致性。本发明的各实施例可以包括其中包含各种计算机硬件的特殊用途或通用计算机, 如下面比较详细地讨论的。在本发明的范围内的各实施例还包括用于携带或在其上存储计 算机可执行指令和/或数据结构的计算机可读介质。这样的计算机可读介质可以是可以被 通用或专用计算机访问的任何可用的介质。作为示例而非限制,这样的计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM或 其他光盘存储器、磁盘存储器或其他磁存储设备,或可以用来携带或存储所需要的以计算 机可执行指令或数据结构的形式存在的程序代码装置并可以被通用或专用计算机访问的 任何其他介质。当通过网络或另一种通信连接(硬连线、无线,或硬连线或者无线的组合) 向计算机传输或提供信息时,计算机正常地将连接认为是计算机可读介质。由此,任何这样 的连接被适当地称为“计算机可读介质”。上面各项的组合也应该包括在计算机可读介质的 范围内。计算机可执行的指令包括,例如,使通用计算机、专用计算机,或特殊用途处理设 备执行某一函数或一组函数的指令和数据。尽管已经用对结构特征和/或方法动作专用的 语言描述了本主题,但可以理解,所附权利要求书中定义的本主题不必受公开的这些具体 特征或动作的限制。相反,上文所描述的具体特征和动作是作为实现权利要求的示例形式 来公开的。在不偏离本发明的精神和基本特征的情况下,本发明可以以其他特定形式来实 现。所描述的实施例在各个方面都只作为说明性的,而不是限制性的。因此,本发明的范围 由所附权利要求书而不是由前面的描述指出。在权利要求的等效内的含义和范围内的所有 更改都将包括在它们的范围内。
权利要求
一种在计算机化环境的面向对象的系统(100)中的方法,所述系统(100)包括使用对应于基于不同数据形状(135、140、145)的不同类型结构的一个或多个数据元素的一个或多个应用程序(120、125、130),所述方法使用公共数据结构(110)来自动向应用程序提供对不同结构类型的数据的访问,以使得使用不同结构类型的应用程序可以互操作,所述方法包括以下动作从应用程序(120)接收(340)对由一个或多个不同的应用程序(125、130)维护的数据(127、133)的一个或多个访问请求(180),其中所请求的数据对应于一个或多个不同的类型结构;标识(350)对应于所述一个或多个不同的应用程序的一个或多个代理(165、170、175);使用所标识的一个或多个代理来将所请求的数据映射(360)到公共数据结构(110),其中所标识的一个或多个代理创建将所请求的数据(127、133)映射到所述公共数据结构(110)的映射数据结构(195);以及将所述映射数据结构(195)提供给作出请求的应用程序。
2.如权利要求1所述的方法,其特征在于,所标识的代理中的至少一个是由所述一个 或多个不同的应用程序中的一个提供的。
3.如权利要求1所述的方法,其特征在于,所标识的代理中的至少一个是由所述系统 (100)提供给所述一个或多个不同的应用程序中的一个的默认代理。
4.如权利要求1所述的方法,其特征在于,还包括将所述公共数据结构(110)中的多个 结构类型中的一个分配给所请求的数据的动作。
5.如权利要求4所述的方法,其特征在于,还包括在所述一个或多个不同的应用程序 (125,130)中的每一个中为所请求的数据标识一个或多个数据形状(135、140、145)的动 作。
6.如权利要求4所述的方法,其特征在于,所述公共数据结构(110)包括对于操作的结 构类型、对于序列的结构类型、对于记录的结构类型、以及对于具有不可识别的数据形状的 数据的结构类型。
7.如权利要求6所述的方法,其特征在于,映射所请求的数据还包括以下动作确定所述一个或多个数据形状(135、140、145)中的一个数据形状对应于返回值的自 变量或函数;以及将对应于所述一个数据形状(135)的所请求的数据分配到操作结构类型。
8.如权利要求6所述的方法,其特征在于,映射所请求的数据还包括以下动作确定所请求的数据中的至少某些数据对应于未定义的数据形状;以及将所述至少某些数据分配到对于未定义的数据形状的结构类型。
9.如权利要求6所述的方法,其特征在于,映射所请求的数据还包括确定所述一个或 多个数据形状(135、140、145)中的一个对应于值的集合的动作。
10.如权利要求9所述的方法,其特征在于,还包括以下动作确定所述值的集合不具有可标识标签;以及将所述数据集合分配到序列结构类型。
11.如权利要求9所述的方法,其特征在于,还包括以下动作确定所述值的集合具有一个或多个可标识标签;以及将所述数据集合分配到记录结构类型。
12.如权利要求1所述的方法,其特征在于,还包括以下动作接收对所请求的数据中的至少某一些执行一个或多个操作的一个或多个请求;以及通过所述映射数据结构(195)来处理所述一个或多个操作。
13.—种在计算机化环境中的应用程序(120)处的方法,所述计算机化环境包括面向 对象的系统(100)以及安装在所述系统中的一个或多个应用程序(120、125、130),所述应 用程序实现具有不同类型结构的一个或多个数据元素,所述方法通过公共数据结构(110) 访问对应于一个或多个不同类型结构的数据,所述方法包括以下动作发送(300)对对应于一个或多个不同类型结构的数据(127、133)的一个或多个访问请求;接收(310) —个或多个映射数据结构(195),所述映射数据结构(195)包括所述所请求 的数据和公共数据结构(110)的一个或多个结构类型之间的映射信息(210、220、230);请求(320)对所述一个或多个映射数据结构(195)的一个或多个操作(200),其中所请 求的一个或多个动作被转换为所述一个或多个不同类型结构的数据(127、133);以及接收(330)对对应于所述一个或多个不同类型结构的所请求的数据(127、133)的所请 求的一个或多个动作已经完成的一个或多个确认。
14.如权利要求13所述的方法,其特征在于,所述一个或多个映射数据结构(195)指示 所请求的数据(127、133)中的至少某一些包括一个或多个值的集合,其中所述集合被分配 到记录结构类型。
15.如权利要求16所述的方法,其特征在于,所述请求一个或多个操作的动作(320)还 包括请求对应于所述一个或多个值中的一个的记录的改变;其中所述一个或多个确认标识所述改变是在所述记录中完成的。
16.如权利要求13所述的方法,其特征在于,所述一个或多个映射数据结构(195)指示 所请求的数据(127、133)中的至少某一些包括被分配到操作结构类型的一个或多个函数。
17.如权利要求16所述的方法,其特征在于,所述请求一个或多个操作的动作(320)还 包括请求对应于所述操作结构类型的一个或多个函数由维护所请求的数据(127、133)的 不同应用程序(125、130)执行;其中所述一个或多个确认指示所述一个或多个函数已被执行。
18.—种在计算机化环境的面向对象的系统(100)中的计算机程序存储产品,所述系 统(100)包括使用对应于基于不同数据形状(135、140、145)的不同类型结构的一个或多个 数据元素的一个或多个应用程序(120、125、130),在所述计算机程序存储产品上存储有计 算机可执行指令,所述指令在被执行时使所述系统中的一个或多个处理器执行包括以下动 作的方法从应用程序(120)接收(340)对由一个或多个不同的应用程序(125、130)维护的数据 (127,133)的一个或多个访问请求(180),其中所请求的数据对应于一个或多个不同的类 型结构;标识(350)对应于所述一个或多个不同的应用程序的一个或多个代理(165、170、 175);使用所标识的一个或多个代理来将所请求的数据映射(360)到公共数据结构(110), 其中所标识的一个或多个代理创建将所请求的数据(127、133)映射到所述公共数据结构 (110)的映射数据结构(195);以及将所述映射数据结构(195)提供给作出请求的应用程序。
全文摘要
本发明的信令系统提供了用于传递、报告,和/或以其他方式处理软件依赖关系链中的状态变更的同步方法。在第一阶段,信令系统标识软件组件之间的所有依赖关系,并还用第一表示来设置每一个节点的二进制指示符。在标识源节点中的任何变更(例如,值被更新)之后,系统将每一二进制指示符更新为第二设置。在第二阶段,系统基本上按从源节点,到中间节点,以及最终节点等的渐进次序,启动依赖关系链中的所有监听程序。一旦所有监听程序都有机会基于已更新的值来执行一个或多个进程,系统就可以丢弃依赖关系图,以允许为后续值变更构建新的依赖关系图。
文档编号G06F9/06GK101952799SQ200980106643
公开日2011年1月19日 申请日期2009年1月23日 优先权日2008年2月25日
发明者C·A·西泽伯斯基, G·M·凯泽, J·D·多蒂, J·R·威廉姆斯 申请人:微软公司