基于元数据的事件化的制作方法

文档序号:6443357阅读:133来源:国知局
专利名称:基于元数据的事件化的制作方法
技术领域
本申请涉及软件程序的定制。具体而言,涉及基于元数据的事件化的软件程序的定制。
背景技术
事件驱动编程是一种编程范例,其中由事件输入、用户动作或来自其它程序或线程的消息来确定程序的流程。在事件驱动应用架构中,应用具有分成两个部分的主循环事件检测和事件处理。在一些集成开发环境中,代码生成助理可以自动化事件处理所需的一些重复性任务。事件驱动程序包括一系列子例程或方法,也称为事件处理程序(handler)例程。 这些方法对主程序响应的事件进行处理例如,用户输入(例如键盘输入、鼠标点击等)可以触发一种方法来打开或关闭作为用户界面一部分的窗口、保存数据、退出应用和类似的动作。事件处理程序被绑定到事件,以便当事件发生时调用正确的函数。用户动作促使程序弓I发事件并调用匹配事件处理程序来处理事件。商业应用是具有可能上千的方法和事件处理程序的复杂软件,并且典型地涉及深度调查、大量的代码、可扩展的测试等。当要进行象商业应用的复杂软件的定制时,设计者要么提供了有限数目的默认备选,这会限制用户体验,要么提供了对定制代码的开发者的完整代码的访问。然而,当软件应用的大部分或完整代码是可访问的时,原始开发者失去对程序特征的控制。各个开发者作出的改变使对原始程序执行的任何测试无效,可能发生原始开发者不具有控制的非预期的错误或执行结果。这样,打开代码可能具有破坏程序的目标(例如用户满意度、性能、解决特定问题域中的问题的适用性等等)的不想要的结果。

发明内容
提供本发明内容以便以简化的形式介绍将在以下的具体实施方式
中进一步描述的一些概念。本发明内容并不旨在专门标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。实施例旨在通过将要调用的事件处理程序添加到元数据中来取代编码制品对软件源代码进行定制。根据一些实施例,类提供可以被分配处理程序的代表的事实被作为元数据的一部分来描述,换句话说,作为事件本身的描述。通过在元数据中定义事件化,就能在不编程源代码(即不修改源代码)的情况下,为特定事件添加和/或移除处理程序。通过阅读下面的详细描述并参考相关联的附图,这些及其他特点和优点将变得显而易见。可以理解,前述一般描述和以下的详细描述都是说明性的,并且不限制所要求保护的各方面。


图1是示出在软件环境中的示例方法和处理程序的概念图2示出了根据某些实施例的示例元数据模型;图3说明了在用于根据一些实施例的代码开发的示例用户界面上的具有处理程序和特性的事件节点;图4说明了用于将处理程序添加到在用于根据其它实施例的代码开发的示例的用户界面上的事件的上下文菜单;图5是可实现根据各实施例的系统的联网环境;图6是可实现各实施例的示例计算操作环境的框图;以及图7示出了根据各实施例的基于元数据的事件化的过程的逻辑流程图。
具体实施例方式如上简要描述,软件源代码可以在没有对其自身的代码进行修改的情况下通过将要调用的事件处理程序添加到元数据中以取代编程制品来进行定制。在以下详细描述中, 参考了构成详细描述的一部分并作为说明示出各具体实施例或示例的附图。可组合这些方面,可利用其他方面,并且可以做出结构上的改变而不背离本发明的精神或范围。因此,以下具体实施方式
并不旨在限制,并且本发明的范围由所附权利要求及其等效方案来限定。尽管在结合在计算设备上的操作系统上运行的应用程序执行的程序模块的一般上下文中描述了各实施方式,但是本领域的技术人员会认识到各方面也可以结合其它程序模块实现。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、组件、数据结构和其它类型的结构。此外,本领域的技术人员可以明白,各实施例可以用其它计算机系统配置来实施,包括手持式设备、多处理器系统、基于微处理器或可编程消费者电子产品、小型计算机、大型计算机以及类似计算设备。各实施例还能在任务由通过通信网络链接的远程处理设备来执行的分布式计算环境中实现。在分布式计算环境中,程序模块可位于本地和远程存储器存储设备两者中。各实施例可被实现为计算机实现的过程(方法)、计算系统、或者诸如计算机程序产品或计算机可读介质等的制品。计算机程序产品可以是计算机系统可读并且编码包括用于使计算机或计算系统执行示例过程的指令的计算机程序的计算机存储介质。计算机可读存储介质可例如通过易失性计算机存储器、非易失性存储器、硬盘驱动器、闪存驱动器、软盘或紧致盘以及类似存储介质中的一个或多个来实现。在整个说明书中,术语“平台”可以是用于执行应用的软件和硬件组件的组合,其中可实现各实施例。平台的示例包括但不限于,在多个服务器上执行的托管服务、在单个服务器上执行的应用以及类似系统。术语“服务器”一般指通常在联网环境中执行一个或多个软件程序的计算设备。然而,服务器还可以被实现为被视作网络上的服务器的、在一个或多个计算设备上执行的虚拟服务器(软件程序)。尽管将商业应用用作以元数据实现用于在不修改源代码的情况下定制程序的处理程序的软件的示例,但是各实施例可以在任何类型的应用中实现。以下提供关于这些技术和示例操作的更多细节。图1包括示出在软件环境中的示例方法和处理程序的概念图100。源代码的基本形式可以包括语句、声明、方法、操作符和关键词。在面向对象的编程中,类是一种构造,其用作模板以创建那个类的对象。类将其表示的概念的状态和行为封装起来。它通过被称为特性的数据占位符来封装状态并通过方法来封装行为。方法是或者与类相关联(该情况下它被称为类方法或静态方法)或者与对象相关联的子例程(在该情况下它是实例方法)。 方法通常包括用于执行动作的一系列编程语句、用于定制那些动作的一组输入参数、以及可能的一个或多个输出值(也称为(诸)返回值)。方法提供了用于访问和处理所指定的数据部分的机制。根据实施例的软件定制系统能够通过基于元数据的事件化来定制复杂软件,而不需要软件程序102的源代码104的修改,这可通过服务器、桌面计算机、膝上计算机、手持计算机、车载计算机、智能电话和类似的计算设备来执行。如上所述,源代码104包括许多方法108。在根据实施例的系统中,类提供了可以被分配处理程序110的代表作为元数据106 的一部分。通过在元数据106中定义事件化,可以在不修改源代码104的情况下添加或移除用于特定事件(或方法108)的处理程序110图2示出了根据某些实施例的示例元数据模型。根据实施例的系统遵循公布和订阅模型,其中所述可定制代码发布任意数目的感兴趣方(即定制代码)可以订阅的信息。定制代码就与实现被定制的功能的代码松散地耦合。底层实现因而可以自由地改变(不需要中断定制代码),只要在类似的情况下激发事件。事件是用信号通知应用代码的状态中的改变的编程制品。当引发事件时可以通知订阅者。订阅是在事件和事件处理程序之间存在的契约。订阅可以使得事件处理程序只要引发事件就被调用。根据实施例的系统中的事件处理程序是一段代码,该段代码指明了当引发事件时将被通知的兴趣(订阅)。每个事件可以具有任意数目的分配给其的事件处理程序。根据实施例的系统可以使用许多类型的事件,可以包括商业事件,所述事件可以在应用元数据中建模,并且只要应用确定其与告知商业逻辑执行中的兴趣点的感兴趣方 (即订阅者)相关则引发事件。每个方法可以具有指定的(正式)参数集。它们可以被认作变量,在执行所述方法之前,用实际参数的值来初始化这些变量。代表是一种定义由各个处理程序匹配的参数简档的事件类型。如图表200所示,类202是由其名称来唯一地标识的。类202可以具有任意数目 (包括0)的代表204以及任意数目(包括0)的方法210。代表204和方法210可以具有任意数目(包括0)个特定类型的命名参数208。代表204可以具有任意数目(包括0)个当引发事件时被调用的事件处理程序206。每个处理程序206是特定类(20 上的方法。根据示例情景,创作了要被定制的代码的应用开发者可以将一些代表指定为扩展 /定制点。定制开发者随后可以通过向这些代表提供事件处理程序来定制程序,这意味着不需要为了实现定制而修改现有的源代码。例如,定制开发者可以安装新版本的源(用维护的扩展/定制点)并随后在新版本的顶部安装定制层。因为定制代码不依赖于底层的实现(可能已经从旧版本中扩展地改变了底层)而是仅仅对从应用层引发的事件作出反应,因此,升级主要涉及建立元数据以指示定制方法应该被调用。图3说明了在用于根据一些实施例的代码开发的示例用户界面300上的具有处理程序和特性的事件节点。如前所述,代表是命名类型的简档,它是由处理程序针对事件来进行匹配;类可以具有任意数目的事件;并且每个事件就像一个方法,但它不具有主体(其主要有效负荷是参数简档以及当事件发生时调用的事件处理程序列表)。在根据实施例的系统中,方法可以在“类”节点304出现。可以将事件作为单独的方法集(例如“CustomerAdded(消费者添加)”306)来列出,并指定有特定图标以指示它们是事件,不是普通的方法。在示例代码开发用户界面300中,每个表示一个事件的节点可以是列表节点,在该节点下用户可以使用拖/放和上下文菜单操作来添加事件处理程序。当选择一个方法时,可以在分开的用户界面部分(308)中呈现其行为、特性等以允许开发者查看与所选的方法相关联的细节并对它们进行修改。可以在类中访问这些事件。换句话说,根据一些实施例,对它们进行保护。可以将元数据表示为用户界面中的具有特性的节点。可以将元数据节点保存在元数据数据库并从元数据数据库中对其进行检索,所述元数据节点支持导入和导出、支持上下文菜单项等。根据其它实施例,元数据可以支持版本化,这样如果特性设置改变就能有效启用升级。图4说明了用于将处理程序添加到在用于代码开发的示例的用户界面上的事件的上下文菜单。在如上所述的类节点下的每个代表可以具有在其下的事件处理程序的序列,当引发事件时就调用这些事件处理程序。每个代表还可以具有名称特性,该名称特性在方法和事件的列表内是唯一的。可以以与维护方法名称相同的方式来维护名称。如同普通的方法那样,代表可以是基于名称的。每个事件的标签可以是其名称。根据另外的实施例,代表可以如同普通的方法那样服从于同一开发者文件(例如 XML注释)。开发者从这个文件确定是在哪些情况下引发事件的以及各个参数的含义。当在“类”节点402下选择了代表时,可以呈现上下文菜单404以启动与该代表相关联的各种动作。例如,通过选择上下文菜单404中的删除项来删除代表节点是可能的。当然,还可以提供例如键盘输入的使用的各种其它交互选项等。如果删除了代表节点,也可以删除所有到其孩子的引用(即各个处理程序)。类似地,通过上下文菜单(例如使用“New Event Handler (新事件处理程序)”项406)将新的事件处理程序添加到元数据中。代表节点可以包含任意数目的指定事件的处理程序的子节点。不同类型的处理程序可以用用户界面400上的不同图标来指示以反映如何处理它们。以上讨论的基于元数据的事件化的系统和实现是为了例示的目的,并且不构成对各实施例的限制。可使用此处讨论的原理采用其它模块、进程和配置来实现各实施例。图5是可实现各实施例的示例联网环境。通过将要调用的事件处理程序添加到元数据中以取代编码制品的源代码定制可以经由在一个或多个服务器514或单个服务器(例如web服务器)516上执行的诸如主存服务的软件来实现。平台可以通过网络510来与诸如智能电话513、膝上型计算机512、或桌面计算机511( ‘客户机设备’)等各个计算设备上的客户端应用进行通信。如上所述,取代将事件作为编码制品来定义,这些事件可以在元数据中建模。在元数据中定义事件化的事实使得在不编程的情况下添加或移除特定事件的处理程序成为可能。在联网环境中,如以前所讨论的,客户机设备511-513可允许对在远程服务器(例如, 服务器514中的一个)上执行的应用进行访问。服务器可直接地或通过数据库服务器518 来从数据存储519中检索相关的数据,或将相关的数据存储到数据存储519中。网络510可包括服务器、客户机、因特网服务供应商以及通信介质的任何拓扑结构。根据各实施例的系统可以具有静态或动态拓扑结构。网络510可包括诸如企业网络等安全网络、诸如无线开放网络等非安全网络、或因特网。网络510还可通过诸如公共交换电话网络(PSTN)或蜂窝网络等其他网络来协调通信。此外,网络510可包括诸如蓝牙或类似网络等短程无线网络。网络510提供此处描述的节点之间的通信。作为示例而非限制,网络510可以包括例诸如声学、RF、红外线和其它无线介质等的无线介质。可以采用计算设备、应用、数据源和数据分发系统的许多其它配置来实现通过基于元数据的事件化的源代码定制。此外,图5中所讨论的联网环境仅用于说明目的。各实施例不限于示例应用、模块、或过程。图6及相关描述旨在提供对其中可实现各实施例的合适计算环境的简要概括描述。参考图6,示出了用于根据各实施的应用(诸如计算设备600)的示例计算操作环境的框图。在基本配置中,计算设备600可以是执行软件应用的任何计算设备并且包括至少一个处理单元602和系统存储器604。计算设备600还可包括协作执行程序的多个处理单元。 取决于计算设备的确切配置和类型,系统存储器604可以是易失性的(诸如,RAM)、非易失性的(诸如,ROM、闪存等)或两者的某种组合。系统存储器604通常包括适于控制平台的操作的操作系统605,例如来自华盛顿州雷蒙德市的微软公司的WINDOWS 操作系统。 系统存储器604还可包括具有源代码6M和元数据626的一个或多个软件应用程序,诸如程序模块606、商业应用622。可通过将要调用的事件处理程序加入到元数据626以取代编码制品来定制商业应用622的源代码624。通过在元数据626中定义事件化,就能在不编程源代码624(即修改源代码624)的情况下,为特定事件添加和/或移除处理程序。该基本配置在图6中由虚线608内的那些组件示出。计算设备600可以具有附加特征或功能。例如,计算设备600还可包括附加数据存储设备(可移动和/或不可移动),例如磁盘、光盘或磁带。在图6中通过可移动存储609和不可移动存储610示出这样的附加存储。计算机可读存储介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据之类的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。系统存储器604、可移动存储609和不可移动存储610 都是计算机可读存储介质的示例。计算机可读存储介质包括但不限于,RAM、ROM、EEPR0M、 闪存或其它存储器技术,CD-ROM、数字多功能盘(DVD)或其它光学存储,磁带盒、磁带、磁盘存储或其它磁存储设备,或能用于存储所需信息且能够由计算设备600访问的任何其它介质。任何这样的计算机可读存储介质都可以是计算设备600的一部分。计算设备600还可以具有输入设备612,诸如键盘、鼠标、笔、语音输入设备、触摸输入设备和类似输入设备。还可以包括输出设备(多个)614,诸如显示器、扬声器、打印机和其它类型的输出设备。这些设备在本领域中公知并且无需在此处详细讨论。计算设备600还可以包含允许该设备与其他设备618通信的通信连接616,诸如通过分布式计算环境中的无线网络、卫星链接、蜂窝链接和类似机制。其他设备618可包括执行通信应用的计算机设备、存储服务器和类似设备。通信连接(多个)616是通信介质的一个示例。通信介质可包括其中的计算机可读指令、数据结构、程序模块,并包括任何信息递送介质。作为示例而非限制,通信介质包括诸如有线网络或直接线连接之类的有线介质,以及诸如声学、RF、红外及其他无线介质之类的无线介质。各示例实施例还包括各种方法。这些方法可以用任何数量的方式,包括本文中所描述的结构来实现。一种此类方式是通过本文中描述的类型的设备的机器操作。另一可任选方式是结合一个或多个人类操作者执行该方法的各个操作中的某一些来执行该方法的一个或多个操作。这些人类操作者无需彼此同在一处,而是其每一个可以仅与执行程序的一部分的机器同在一处。图7示出根据各实施例、使用基于元数据的事件化来定制源代码的过程700的逻辑流程图。过程700可在任何软件应用中实现。在过程700中,操作710、720和730在设计时间702发生,而操作740和750在运行时704发生。过程700在操作710处开始,其中,在软件应用的源代码中指定一个或多个定制点。定制点可以是例如源代码的方法。在操作720,可定义一个或多个代表。代表是命名类型简档,它们将与源代码所引发的事件的处理程序相匹配。在操作730处,可以定义一个或多个与代表相关联的处理程序。处理程序可以是在软件应用的元数据中定义的方法,响应于在所述源代码执行期间正被引发的事件来执行这些方法,使得在没有对源代码的修改的情况下允许软件应用的定制。在操作740,在源代码执行期间可以做出事件是否被引发的判定。可以通过源代码中的方法的声明来引发事件。如果检测到事件,在由源代码所定义的程序的执行继续之前, 由代表所定义的相关联的处理程序可以在操作750处执行。包括在过程700内的各操作是用于说明目的。根据各实施例的通过基于元数据的事件化的源代码定制可以使用此处所述的各原理通过具有更少或更多步骤的相似过程、以及不同的操作次序来实现。以上说明书、示例和数据提供了对各实施例组成的制造和使用的全面描述。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。相反,上述具体特征和动作是作为实现权利要求和各实施例的示例形式而公开的。
权利要求
1.一种至少部分地由计算设备来执行的用于通过基于元数据的事件处理来进行源代码定制的方法,所述方法包括指定与软件程序的源代码中的事件相关联的至少一个定制点(710);定义至少一个代表,所述代表是一种命名类型简档,所述命名类型简档由与在定制点处所定义的事件相关联的一个或多个处理程序来进行匹配(720、730);以及响应于在源代码执行期间正被引发的事件,允许在所述软件程序的元数据中定义的所述一个或多个处理程序中的至少一个的执行(750)。
2.如权利要求1所述的方法,其特征在于,所述源代码(104)的类(20 包括一个或多个代表(204)和一个或多个方法010)。
3.如权利要求2所述的方法,其特征在于,每个代表(204)和方法(210)包括预定类型的一个或多个命名的参数008)。
4.如权利要求1所述的方法,其特征在于,还包括允许定制开发者执行下述操作之一将处理程序(206)添加到所述源代码中的事件的元数据中以及将处理程序从所述源代码中的事件的元数据中移除。
5.如权利要求1所述的方法,其特征在于,所述事件是以下各项之一在用于商业逻辑执行的元数据中建模的商业事件、当执行源代码方法(210)时所引发的方法事件以及与在与所述源代码相关联的数据库中的改变相关引发的数据事件。
6.如权利要求1所述的方法,其特征在于,通过在源代码的方法(210)和事件的列表内唯一的名称来标识至少一个代表004)。
7.如权利要求1所述的方法,其特征在于,所述至少一个代表(204)包括文件注释,所述文件注释包括了与引发事件的情况相关联的信息和与所述事件相关联的至少一个参数 (208)的定义。
8.一种用于执行可定制的软件程序的计算设备,所述计算设备包括用于存储指令的存储器(604);耦合至所述存储器的处理器(602),所述处理器结合在所述存储器中存储的指令来执行所述可定制的软件程序,其中所述处理器被配置成指定与软件程序的源代码中的事件相关联的至少一个定制点(710);定义至少一个代表,所述代表是一种命名类型简档,所述命名类型简档由与在定制点处所定义的事件相关联的软件程序的元数据中定义的一个或多个处理程序来进行匹配 (720,730);以及允许定制开发者执行下述操作之一将处理程序添加到所述源代码中的事件的元数据中以及将处理程序从所述源代码中的事件的元数据中移除;以及响应于在源代码执行期间正被引发的事件,允许所述一个或多个处理程序中的至少一个的执行(750)。
9.如权利要求8所述的计算设备,其特征在于,所述处理器(602)还被配置成提供开发者用户界面,所述开发者用户界面通过将事件作为分开的方法集列出来呈现源代码(104)的事件和方法。
10.如权利要求8所述的计算设备,其特征在于,所述处理器(60 还被配置成将所述元数据呈现为具有特性的节点,使得可以允许将元数据存储在元数据数据库中以及从元数据数据库中检索元数据。
11.如权利要求10所述的计算设备,其特征在于,所述元数据包括用于响应于特性集的改变允许升级的版本。
12.—种其上存储有指令的计算机可读存储介质,所述指令用于通过基于元数据的事件处理来定制软件程序,所述指令包括 指定与软件程序的源代码中的事件相关联的至少一个定制点(710),其中所述定制点是与方法相关联的;定义至少一个代表,所述代表是一种命名类型简档,所述命名类型简档由与在定制点处所定义的事件相关联的软件程序的元数据中定义的一个或多个处理程序来进行匹配 (720,730);允许定制开发者执行下述操作之一将处理程序添加到所述源代码中的事件的元数据中以及将处理程序从所述源代码中的事件的元数据中移除;以及响应于在源代码执行期间正被引发的事件或所述方法中的声明,允许所述一个或多个处理程序中的至少一个的执行(750)。
13.如权利要求12所述的计算机可读存储介质,其特征在于,响应于正被引发的事件而执行的处理程序(206)是在托管代码和非托管代码之一内定义的方法。
14.如权利要求12所述的计算机可读存储介质,其特征在于,所述指令还包括在图形用户界面中将与软件程序相关联的方法010)、事件以及处理程序(206)呈现为结构化图表中的节点;以及响应于节点选择呈现上下文菜单(300)以允许定制开发者执行下述操作之一查看所选节点的属性和特性和修改所选节点的属性和特性。
15.如权利要求14所述的计算机可读存储介质,其特征在于,所述上下文菜单(300)启用以下各项的集合中的至少一个添加新的处理程序、移除现有处理程序、复制现有处理程序以及编译所选处理程序。
全文摘要
本申请涉及基于元数据的事件化。通过将要调用的事件处理程序添加到元数据中来取代编码制品以允许软件源代码的定制。类提供可以被分配处理程序的代表的事实被作为元数据的一部分来描述,换句话说,作为事件本身的描述。通过在元数据中定义事件化,就能在不编程源代码或不修改源代码的情况下,为特定事件添加和/或移除处理程序。
文档编号G06F9/44GK102419709SQ20111044317
公开日2012年4月18日 申请日期2011年12月14日 优先权日2010年12月15日
发明者M·C·马西亚斯, P·维拉森, R·戈图穆卡拉, 陈兆琪 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1