专利名称:使用实体模式来捕捉数据模型的结构的系统和方法
技术领域:
本发明涉及软件开发的商业框架,尤其涉及允许以可重用的方式表示数据模型地结构模式的方法对应用程序或计算机程序中的逻辑的灵活实现的框架。
背景技术:
在为商业应用程序创建软件时,必须考虑企业一般使用各种机制来控制和分析企业经营,诸如会计、工资单、人力资源、销售定单、雇员跟踪、顾客关系跟踪等。提供这些功能的工具一般是使用计算机软件来实现的,且可以使用被称为框架或商业框架的计算机自动化协助来构造这些工具。软件包可以提供用户界面来使用户能容易地输入和查看对应于各种企业经营的数据。也配置软件包来访问和更新存储在数据库中的数据。
设计商业应用程序来处理各种企业业务,诸如定单的履行及装运。商业应用程序包含使用代码实现的各种应用程序特征。除代码以外,商业应用程序包含多个抽象概念以当执行该商业应用程序时与代码交互。例如,MICROSOFT BUSINESSFRAMEWORK(MBF)向企业开发员提供各种各样的框架定义的抽象(实体、运算...),以及允许企业开发员为可重用性而捕捉商业逻辑的单个抽象(特性模式)。例如,一种抽象是对存储属于顾客或销售定单的数据建模的商业实体。这些实体(或对象)包含用于存储数据的类。
商业应用程序包含涉及这些实体中的一个或多个的多种不同的模式,即实体模式。在同一应用程序中通常手动地重复同一模式多次,而没有捕捉模式的方法。因此,实际上原始的模式将最终变得模糊。如果开发员想要再次应用该同一模式,不可能告知应用程序中的哪一个是原始的那个。如果该原始模式改变了,那么每个应用程序必须针对该模式来被手动地确认并从而改变。
就此,需要向开发员提供捕捉包含多个实体以及含有在设计时对实体的自动确认的相关逻辑的结构化模式的方法的系统和方法。
发明内容
鉴于本领域中上述的缺陷,本发明提供用于捕捉包含多个实体和在运行时确认实体的相关逻辑的结构化模式,以及提供支持任何应用的模式并调用模式专用代码的运行时框架的系统和方法。当开发软件时,开发员可以声明性地重用所捕捉到的模式。一般优点是在运行时应用是模型驱动的,且在运行时解释模型数据。应用和/或模式的使用是应用程序或软件程序的模型的一部分。
对本发明的若干实施例,提供了用于捕捉数据模型的结构的方法,包括基于该数据模型内的至少一个实体结构来创建实体模式。确认实体模式的应用来确保该应用遵循该实体模式。确认的过程可以包括,将实体模式信息作为实体模式的应用的一部分保存,并使用所述保存的实体模式信息检查该应用是否依附该实体模式。
实体模式含有用于检查应用是否依附实体模式的至少一个实体角色。另外,该过程可以包括为实体角色生成第一相应的类,该类具有由实体角色描述的结构。第一类允许在运行时导航至该实体模式的其它角色。检索可能向开发员隐藏的元数据的一种方式是在运行时为包含可用元数据的实体角色生成第二相应的类。本发明的其它优点和特征将在以下描述。
将参考附图进一步描述根据本发明用于使用实体模式来捕捉数据模型的结构的系统和方法,附图中
图1是根据本发明用于创建和使用实体模式的进程的高级视图流程图2是根据本发明的可能的实施例,按照示例性实体模式在模型编辑器中可能的出现来示出它们的样本屏幕截图3是根据本发明的可能的实施例,示出使用商业实体设计器的实体角色的应用的示例的样本屏幕截图4a是根据本发明,示出对应于针对实体模式角色来确认具体的实体的、图1的框中所涉及的进程的更详细的视图的流程图4b是根据本发明,对应于确定实体是否履行角色的、图4a的框中涉及的进程的更详细视图的流程图5是示出可能的实施例中为每一实体模式生成的代码的体系结构的框图。
图6是表示适用于本发明的各方面的示例性计算设备的框图;以及
图7示出了可在其中实现多个计算机化的进程的示例性网络化计算环境。
具体实施例方式
在以下描述和附图中描述了某些特殊细节,用于提供对本发明的各个实施例的全面理解。通常与计算和软件技术相关联的某些公知细节将不在以下揭示中描述,来避免对本发明的各实施例的不必要的模糊。而且,本领域的普通技术人员可以理解,他们可以无需以下描述的细节中的一个或多个而实现本发明的其它实施例。最后,尽管在以下揭示中是参考步骤和序列来描述各个方法的,但是如此的描述是用于提供本发明的实施例的清楚的实现方式,且步骤以及步骤的序列不应被作为实现本发明所必需的。
概观
描述了用于使用实体模式捕捉数据模型的结构的系统和方法。本发明涉及可以例如使用MICROSOFT BUSINESS FRAMEWORK(MBF)实现的实体模式。然而,尽管为示例性实现的讨论通常根据关于MBF来描述本发明,但是本发明不限于特定的框架,且一般在诸如,例如ORACLE APPLICATION DEVELOPMENTFRAMEWORK(ADF)等其它开发框架中也可应用此处所讨论的概念。此处揭示的实体模式可以包括关于实体图的结构和概念信息,且可以当对基于实体模式改进应用中的总体质量和一致性的具体应用程序应用这些信息时确认信息。
首先,将描述设计实体模式、应用实体模式角色以及确认应用的实体模式角色的进程,随后是为实体模式角色编写模型的讨论。下一步,将使用提供的样本生成的代码清单来描述定义实体模式体系结构的生成的代码以及运行时框架。最后,图6和7提供了可被认为一般适用于此处所述的系统和方法的计算和网络环境。因为图6和7中的材料一般用于示例性的目的,在本说明书的最后,名为“示例性计算和网络化环境”的一节中保留相应的描述。在附录A中提供了此处使用的定义和术语的短小列表。
设计实体模式和应用实体模式角色
首先参考图1,示出了根据本发明用于创建和使用实体模式的高级视图流程图。正常情况下,仅开发员已知模式的使用,或者最多生成向导也已知模式的使用。应用的模式的知识不与应用一起保持。实体模式将维持该知识作为应用的一部分;从而使得无论何时应用或者模式改变,都可能重新确认任何应用对所应用的模式的依附。
首先,在MBF模型编辑器中设计实体模式101。下一步,实体模式角色被应用于具体的实体102。然后,针对实体模式角色确认具体的实体103,来确保该实体遵循该实体模式。在模型编辑器内将实体模式设计为另一其它MBF抽象概念。可以使用如BED的视觉设计器来设计实体模式。
下一步,发生模式专用代码的运行时执行140。运行时框架支持任何应用的模式并调用模式专用代码。一般的优点是,运行时操作是模型驱动的,且在运行时解释模型数据,可以在运行时向实体查询所应用的角色,且实体可以使得返回角色的实例。应用和模式的使用是应用程序/软件程序的模型的一部分。
下一步参考图2,示出了显示如示例性实体模式104在模型编辑器107中出现的样本屏幕截图。实体模式104是包含实体角色类(EntityRoleClasses)105的顶层元素。作为示例示出了标题行模式(HeaderLinePattern)实体模式106。实体角色遵循与特性模式相同的类(类型)/实例模式。实体角色是实体角色类105的实例,同样特性模式是特性模式类型的实例。对于特性模式,可以选择通过在模型编辑器107对类和实例均使用术语实体角色来向开发员隐藏(命名级)。以下,术语实体角色将被用于类和实例。
实体角色105固有地包括多个与实体相同的模型元素,诸如特性(Property)108、关联(Association)109、组成(Composition)110以及特性模式。这些元素中的大多数将含有与它们具体对应物相同的属性。关于特性108,对实体角色105上的特性的定义必须包含足够的信息来生成实体角色105运行时类,该类展示所定义的特性,并使用运行时元数据将它们映射至主存实体上它们的相应特性。例如,存取器(Accessor)、允许为空(AllowNull)、数组长度(ArrayLength)以及类型(Type)。对于关联109和组成110,它们处于定义对其它实体角色的关系的实体角色105层。当将实体角色105应用于实际实体时,必须满足指定的关系。修饰(Decorations)是当将实体角色105应用于具体实体时必须被指定的元数据的定义。生成的实体角色类105将含有包装该元数据的特性。修饰已被用于性质模式。
可以在实体角色105上定义在主存实体上其它实体角色的存在。这就是如何描述了实体角色之间的继承。例如,公司实体角色规定政党实体角色必须也存在于主存实体上。
可以在实体角色105上定义主存实体上的特性模式的存在。作为应用实体角色向导(在以下进一步描述)的一部分,提供了映射或创建所定义的特性模式的选择。实体模式角色可以通过使用在该层定义的特性和关系进行导航以在实体模式104内绑定。角色也可以保持“未绑定”,以使实体角色105的消费者来绑定它们。最后,可以在实体角色类特性上以特性模式可行的相同方式来定义特性确认符的存在。另外,可以设计操作来以可以使用实体的方式而与实体角色105一起工作。同样,所生成的实体角色类是部分的,且可以使用另外的方法和公共语言运行库(CLR)特性来扩展,CLR特性工作在实体角色类105模型元素中定义的特性抽象上。CLR是管理.NET程序代码的执行并提供诸如存储器和异常管理、调试和剖视以及安全性等服务的运行时环境。CLR是.NET框架的主要组件。CLR也被称为虚拟执行系统(VES)。
使用拖放将实体角色应用于模型编辑器107中的实体。从实体模式106拖动实体角色105并将其放置于实体上的实体角色文件夹上。在实体角色节点105上右击将执行对话来从模型中可用的实体模式中选取实体角色。
下一步参考图3,示出了根据本发明使用商业实体设计器(Business EntityDesigner(BED))112的实体角色的应用的示例的样本屏幕截图。可以使用BED112中的拖放来应用实体角色。所设计的实体模式(Entity Patterns)113将出现在工具箱(Toolbox)114的表面作为第一类公民。例如,从工具箱114拖动实体角色115,并将其放置于实体(Entity)116上方将应用该实体角色115。放置动作可能会触发实体角色向导。该向导将提供用于映射或创建为实体角色描述的所有必须的特性、关联、组成及其它元素的容易的用户体验。
下一步参考图4a,显示了根据本发明,示出对应于针对实体模式角色确认具体实体的、图1的框中所涉及的进程的更详细的视图的流程图。在设计时为对所应用的实体角色的一致性而确认使用应用的实体角色的实体设计。通过使用模型确认引擎来实现实体角色的规定本质,模型确认引擎针对实体角色确认该实体117,并确定该实体是否满足该角色118。如果实体不满足角色119,那么向开发员提供出错消息。如果所应用的实体角色不能被去忍,那么该模型将不能编译。如果该实例确实满足角色120,那么确认完成121且确认是成功的。实体模式设计器也可以编写说明性的文本并嵌入至带有信息的附加资源的超链接,来向开发员提供关于实体模式的有用信息。
实体角色可以指定对实体角色的关系(关联和组成)。在模型确认时,确认主存实体上的具体关系,以更正多样性并应用正确的实体角色。双向确认关系。在标题/行模式中,应用标题角色(HeaderRole)的实体必须含有应用行角色(LineRole)的实体的组成,而也确认使用行角色的实体,以查看是否由应用标题角色的实体组成。
下一步参考图4b,显示了示出对应于确定实体是否满足角色的、图4a的框中所涉及的进程的更详细的视图的流程图。可以确认特性,以查看实体角色特性和具体实体特性之间的映射是否存在。也确认是否遵循实体角色特性上的特性集,例如允许为空、类型等。首先,检查角色的特性141。然后,确定实体角色的这些特性是否实际匹配具体的实体特性。如果匹配,那么确认完成,否则,例如可以向开发员提供出错消息。
编程模型
实体角色将含有与所定义的特性和关系对应的类。这允许开发员在更高的实体角色层使用实体数据来工作。实体角色上编写的代码可以通过所应用的特性模式直接或者间接地用其自身定义的特性以及相关实体上的特性来工作。然而,可以无需此处描述的特定编程模型来使用实体模式的设计和确认。
关于实体角色和接口的关系,接口用于隐藏代码实现,而实体角色隐藏数据的不同应用。实体角色可以用于应用“标记接口”模式。实体角色也含有某些与(多)继承的类似之处。可以使用正常的继承来解决某些情景,但是实体角色也可以用于多继承情景,且含有位于实体角色与底层实体之间的额外的映射层。与多继承相反,可以在已编译的实体上声明性地应用实体角色。
实体角色可以订阅由具体应用激发的事件。例如,定义了名、中间名和姓的3个特性的顾客实体角色可以订阅在名和姓上有变化的事件。当在主存实体上激发了所订阅的事件,将执行在实体角色类123中编写的代码。
可以对应用了给定实体角色的实体类型进行查询。例如,可以对应了用资源实体角色的所有实体进行查询。这提供了所应用的实体角色的运行时发现。可能对实体的实例查询所应用的角色的列表或特殊角色的存在。这将给出类似CLR界面的编程模型的编程模型。
首先,瞥见可能试图表示使用CLR界面的实体上的所应用的实体角色,但这要求实体的重新编译,并产生如下的代码,这对于定制情景是不期望的。
Customer customer=Customer.Create();
if(customer is IParty)
{
//进行Iparty填充
}
相反,如以下代码所示,实现其中可以通过一种方法来查询实体的编程模型
Customer customer=Customer.Create();
if(customer.IsEntityRole<PartyEntityRole>())
{
//进行Party填充
}
类似于作为界面的关键词,可以如以下代码所示,对实体查询特定实体角色的实例
Customer customer=Customer.Create();
PartyEntityRole party=customer.GetEntityRole<PartyEntityRole>();
if(party!=null)
{
//进行Party
}
可以多次应用实体角色(每次使用不同的映射),因此如下所示,支持对实体查询特定实体角色类的列表的支持
Customer customer=Customer.Create();
PartyEntityRole[]parties=
customer.GetEntityRoles<PartyEntityRole>();
foreach(PartyEntityRole party in parties)
{
//至Party
}
如下所示,也支持检索对实体的所有实体角色列表
Customer customer=Customer.Create();
EntityRole[]roles=customer.GetEntityRoles();
foreach(EntityRole role in roles)
{
//进示stuff
}
生成的代码以及运行时框架
下一步参考图5,显示了示出为每一实体模式113生成的代码的体系结构。对每一实体模式113中的每一实体角色122,由框架生成两个对应的类。一个类是运行时编程接口123,它具有由角色描述的结构,并允许导航(124)至同一模式113的其它角色125。其它类126包含在运行时可用的与每一角色相关联(127)的元数据。以上描述了一个实施例中,在框架中如何生成类,然而,可以用不同的方式(甚至作为类123的一部分)实现元数据类126。同样,如上所述,在运行时可以对实体查询所应用的角色,并返回该角色类的实例。
例如,类(<EntityRoleName>)展示了所定义的特性、关联和组成,以及包含访问存储在元数据中的修饰的值的特性的类(<EntityRoleName>info)。<EntityRoleName>Info类是从元数据服务中使用用于实体角色特性、关联和组成以及其实体对应物之间的映射的修饰值和数据填充的运行时类。对在实体角色类上指定的每个修饰,生成CLR特性来访问与该修饰相关联的元数据信息。
对每个特性、关联和组成,在类中生成带有后缀“Map”的串类型CLR特性。由框架来生成这些串特性,以反映主存实体类上的目标特性。如下提供为含有SumFormatString修饰、Sum特性和Lines组成的标题实体角色(Header Entity Role)的info类(信息类)所生成的代码的示例
//----------------------------------------------------//<autogenerated>// 此代码由工具自动生成。// 运行时版本2.0.40607.42//// 对该文件的改变将引起不正确的行为且如果重新生成代码,// 可能丢失该文件。//</autogenerated>//----------------------------------------------------namespace MyModel{<!-- SIPO <DP n="8"> --><dp n="d8"/>using System;using System.BusinessFramework;using System.BusinessFramework.Entities;public class HeaderRoleInfoEntityRoleInfo{private string sumFormatString;private string sum;private string lines;public string SumFormatString{get{return this.sumFormatString;}set{this.sumFormatString=value;}}public string Sum{get{return this.sum;}set{this.sum=value;}}public string Lines{get{return this.lines;}set{this.lines=value;}}public override System.Type GetEntityRoleClass(){return typeof(HeaderRole);}}}
关于展示所定义的性质、联系和组成的<EntityRoleName>类,如下定义为含有SumFormatString修饰、Sum性质和Lines组成的标题实体角色的运行时类所生成的代码的示例
//---------------------------------------------------//<autogenerated>// 此代码由工具自动生成。// 运行时版本2.0.40607.42//// 对该文件的改变将引起不正确的行为且如果重新生成代码,// 可能丢失该文件。//</autogenerated>//----------------------------------------------------namespace MyModel{using System;using System.BusinessFramework;using System.BusinessFramework.Entities;public partial class HeaderRoleEntityRole{public HeaderRole(EntityRoleInfo info,Entity entity)base(info,entity){}public Decimal Sum{get{return((Decimal)(GetEntityRoleHost().GetProperty(GetInfo().Sum).Value));}set{GetEntityRoleHost().GetProperty(GetInfo().Sum).Value=value;}}public EntityRoleCollection<LineRole>Lines{get{object value=GetEntityRoleHost().GetType().GetProperty(GetInfo().Lines).GetValue(GetEntityRoleHost(),null);if((value=null)){return null;}else{return newEntityRoleCollection<LineRole>(((EntityCollection)(value)));}}}protected new HeaderRoleInfo GetInfo(){return((HeaderRoleInfo)(base.GetInfo()));}<!-- SIPO <DP n="10"> --><dp n="d10"/>}}
使用3种方法,运行时框架实现了实体类和某些基类。因为它是轻便的,且在实体类上不含有存储器覆盖。同样,如果实体角色订阅了事件,则可以为每一实体例示实体角色。实体角色类,例如是所应用的实体角色的运行时表示的基类。使用两种方法来获取相应的实体角色信息(EntityRoleInfo)对象及主存实体。以下提供实体角色类的示例性代码列表
namespace System.BusinessFramework.Entities
{
public abstract class EntityRole
{
public EntityRole(System.BusinessFramework.Entities.EntityRoleInfo info,System.BusinessFramework.Entities.Entity entity);
public virtual System.BusinessFramework.Entities.Entity GetEntityRoleHost();
public System.BusinessFramework.Entities.EntityRoleInfo GetInfo();
}}
例如,实体角色信息是运行时元数据信息类的基类,包含从元数据服务中提取出的映射上的高速缓存的信息。以下提供实体角色信息类示例性代码列表
namespace System.BusinessFramework.Entities
{
public abstract class EntityRoleInfo
{
protected EntityRoleInfo();
public abstract System.Type GetEntityRoleClass();
}}
实体角色集合(EntityRoleCollection)类是允许在实体角色层访问实体集合(EntityCollection)的围绕实体集合的包装,而实体模式管理器(EntityPatternManager)类负责向元数据服务查询所应用的实体并在需要时例示。实体模式管理器类将连接至元数据服务,且对于每一个所应用的实体角色,将使得相应的实体角色信息类与必需的映射信息和相应的实体角色类水合。实体基类也可以具有访问应用于实体的实体角色的方法。可以使用高速缓存,使得仅以预定的速率例示实体角色信息类。
基于实体模式的自动生成的UI
实体模式的存在保存了当自动生成用户界面(UI)时可以利用的有价值的信息。建模为实体角色的一部分的特性和关系通常是实体的关键元素,且可以处于UI中给定的主导地位。
当在有限可用空间的UI上显示带有所应用的政党角色的顾客实体时,自动生成机制可以使用政党角色的存在来选择显示的特性。
UI布局可以被链接至实体模式,从而通过检查具体实体所应用的实体角色来为具体实体提供一致的UI。
示例性计算和网络环境
参考图6,示出了表示适于结合本发明的各方面使用的示例性计算设备的框图。例如,实现用于在树视图中编辑内联性质的过程和方法的计算机可执行指令可以驻留和/或运行在如图6中所示的这样一个计算环境中。计算系统环境220仅是合适的计算环境的一个示例,并不旨在对本发明的使用范围或功能提出任何限制。也不应该把计算环境220解释为对示例性操作环境220中示出的任一组件或其组合有任何依赖性或要求。
本发明可用众多其它通用或专用计算系统环境或配置来操作。适合在本发明中使用的公知的计算系统、环境和/或配置的示例包括,但不限于,个人计算机、服务器计算机、手持或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费者电子产品、网络PC、小型机、大型机、包含上述系统或设备中的任一个的分布式计算机环境等。
本发明可在诸如由计算机执行的程序模块等的计算机可执行指令的通用语境中描述。一般而言,程序模块包括例程、程序、对象、组件、数据结构等,它们执行特定任务或实现特定抽象数据类型。本发明也可以在分布式计算环境中实现,其中任务由通过通信网络连接的远程处理设备执行。在分布式计算环境中,程序模块可以位于包括存储器存储设备在内的本地和远程计算机存储介质中。
用于实现本发明各方面的示例性系统包括计算机241形式的通用计算设备。计算机241的组件可以包括,但不限于,处理单元259、系统存储器222和将包括系统存储器在内的各种系统组件耦合至处理单元259的系统总线221。系统总线221可以是若干类型的总线结构中的任一种,包括存储器总线或存储器控制器、外围总线和使用各种总线体系结构中的任一种的局部总线。作为示例,而非限制,这样的体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、扩展的ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线和外围部件互连(PCI)总线(也被称为Mezzanine总线)。
计算机241通常包括各种计算机可读介质。计算机可读介质可以是能够被计算机241访问的任何可用介质,且包括易失性和非易失性介质、可移动和不可移动介质。作为示例,而非限制,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以任何方法或技术实现的用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁带盒、磁带、磁盘存储或其它磁性存储设备、或能用于存储所需信息且可以由计算机241访问的任何其它介质。通信介质通常具体化为诸如载波或其它传输机制等已调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据,且包含任何信息传递介质。术语“已调制数据信号”指的是这样一种信号,其一个或多个特征以在信号中编码信息的方式被设定或更改。作为示例,而非限制,通信介质包括有线介质,诸如有线网络或直接线连接,以及无线介质,诸如声学、RF、红外线和其它无线介质。上述中任一组合也应包括在计算机可读介质的范围之内。
系统存储器222包括易失性或非易失性存储器形式的计算机存储介质,诸如只读存储器(ROM)223和随机存取存储器(RAM)260。基本输入/输出系统224(BIOS)包含有助于诸如启动时在计算机241中元件之间传递信息的基本例程,它通常存储在ROM 223中。RAM 260通常包含处理单元259可以立即访问和/或目前正在操作的数据和/或程序模块。作为示例,而非限制,图6示出了操作系统225、应用程序226、其它程序模块227和程序数据228。
计算机241也可以包括其它可移动/不可移动、易失性/非易失性计算机存储介质。仅作为示例,图6示出了从不可移动、非易失性磁介质中读取或向其写入的硬盘驱动器238,从可移动、非易失性磁盘254中读取或向其写入的磁盘驱动器239,以及从诸如CD ROM或其它光学介质等可移动、非易失性光盘253中读取或向其写入的光盘驱动器240。可以在示例性操作环境中使用的其它可移动/不可移动、易失性/非易失性计算机存储介质包括,但不限于,盒式磁带、闪存卡、数字多功能盘、数字录像带、固态RAM、固态ROM等。硬盘驱动器238通常由不可移动存储器接口,诸如接口234连接至系统总线221,磁盘驱动器239和光盘驱动器240通常由可移动存储器接口,诸如接口235连接至系统总线221。
以上描述和在图6中示出的驱动器及其相关联的计算机存储介质为计算机241提供了对计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在图6中,硬盘驱动器238被示为存储操作系统258、应用程序257、其它程序模块256和程序数据255。注意,这些组件可以与操作系统225、应用程序226、其它程序模块227和程序数据228相同或不同。操作系统258、应用程序257、其它程序模块256和程序数据255在这里被标注了不同的标号是为了说明至少它们是不同的副本。用户可以通过输入设备,诸如键盘251和定点设备252(通常指鼠标、跟踪球或触摸垫)向计算机241输入命令和信息。其它输入设备(未示出)可以包括麦克风、操纵杆、游戏垫、圆盘式卫星天线、扫描仪等。这些和其它输入设备通常由耦合至系统总线的用户输入接口236连接至处理单元259,但也可以由其它接口或总线结构,诸如并行端口、游戏端口或通用串行总线(USB)连接。监视器242或其它类型的显示设备也经由接口,诸如视频接口232连接至系统总线221。除监视器以外,计算机也可以包括其它外围输出设备,诸如扬声器244和打印机243,它们可以通过输出外围接口233连接。
计算机241可使用至一个或多个远程计算机,诸如远程计算机246的逻辑连接在网络化环境中操作。远程计算机246可以是个人计算机、服务器、路由器、网络PC、对等设备或其它常见网络节点,且通常包括上文相对于计算机241描述的许多或所有元件,尽管在图6中只示出存储器存储设备247。图6中所示逻辑连接包括局域网(LAN)245和广域网(WAN)249,但也可以包括其它网络。这样的网络环境在办公室、企业范围计算机网络、内联网和因特网中是常见的。
当在LAN网络环境中使用时,计算机241通过网络接口或适配器237连接至LAN 245。当在WAN网络环境中使用时,计算机241通常包括调制解调器250或用于通过诸如因特网等WAN 249建立通信的其它装置。调制解调器250可以是内置或外置的,它可以通过用户输入接口236或其它合适的机制连接至系统总线221。在网络化环境中,相对于计算机241所描述的程序模块或其部分可以存储在远程存储器存储设备中。作为示例,而非限制,图6示出了远程应用程序248驻留在存储器设备247上。可以理解,所示的网络连接是示例性的,且可以使用在计算机之间建立通信链路的其它手段。
应该理解,此处描述的各种技术可以结合硬件或软件或两者的适当组合来实现。这样,本发明的方法和装置或其某些方面或部分,可以采用包含在有形介质中的程序代码(即,指令)的形式,有形介质诸如软盘、CD-ROM、硬盘或任何其它机器可读存储介质,其中,当程序代码被加载至诸如计算机等机器并由其运行时,该机器成为用于实现本发明的装置。在程序代码在可编程计算机上运行的情形中,计算设备一般包括处理器、该处理器可读的存储介质(包括易失性和非易失性的存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。一个或多个程序可以例如,通过使用API、可重用控件等实现或利用结合本发明描述的过程。这样的程序较佳地用高级过程语言或面向对象编程语言来实现,以与计算机系统通信。然而,如果需要,可以用汇编语言或机器语言来实现程序。在任何情形中,语言可以是编译的或解释的语言,且与硬件实现相结合。
尽管示例性实施例涉及在一个或多个独立计算机系统的环境中利用本发明的各方面,但本发明不受此限制,而是可以结合任何计算环境,诸如网络或分布式计算环境来实现。而且,本发明的各方面可以在多个处理芯片或设备中实现或跨多个处理芯片或设备实现,且存储可以类似地跨多个设备来实现。这样的设备可以包括,个人计算机、网络计算机、手持式设备、超级计算机或集成至诸如汽车和飞机等其它系统的计算机。
在图7中提供了示例性的网络化计算环境。本领域的普通技术人员可以理解,网络可以连接任何计算机或其它客户机或服务器设备,或处于分布式计算环境中。就此,含有任何数量的处理、存储器或存储单元,以及同时发生的任何数量的应用程序和进程的任何计算机系统或环境被认为适用于本发明所提供的系统和方法。
分布式计算通过计算设备和系统之间的交换提供了计算机资源和服务的共享。这些资源和服务包括信息的交换、文件的高速缓存存储和磁盘存储。分布式计算利用网络连接,允许客户机利用它们的集体力量来使整个企业受益。就此,各种设备可以含有可以包含此处所描述的过程的应用程序、对象或资源。
图7提供了示例性的网络化或分布式计算环境的示意图。环境包括计算设备271、272、276和277,以及对象273、274和275,还有数据库278。这些实体271、272、273、274、275、276、277和278中的每一个可以包括或使用程序、方法、数据存储、可编程逻辑等。实体271、272、273、274、275、276、277和278可以跨诸如PDA、音频/视频设备、MP3播放器、个人计算机等的相同或不同设备的各部分。每一实体271、272、273、274、275、276、277和278可以经由通信网络270与另一实体271、272、273、274、275、276、277和278通信。就此,任何实体可以负责维护和更新数据库278或其它存储元件。
网络270本身可以包括向图7的系统提供服务的其它计算实体,且其本身可以表示多个互连的网络。根据本发明的一方面,每一实体271、272、273、274、275、276、277和278可以包括可使用API或其它对象、软件、固件和/或硬件来请求其它实体271、272、273、274、275、276、277和278中的一个或多个的服务的离散的功能性程序模块。
也可以理解,诸如275等对象可以主存于另一计算设备276上。这样,尽管所示的物理环境可以将所连接的设备示为计算机,但是这样的说明仅是示例性的,该物理环境可以被替换地描述或描绘成含有诸如PDA、电视机、MP3播放器等的各种数字设备,以及诸如接口、COM对象等软件对象。
存在支持分布式计算环境的各种系统、组件和网络配置。例如,计算系统可以由有线或无线系统、本地网络或广泛分布的网络连接在一起。目前,多个网络被耦合至因特网,因特网为广泛分布的计算提供基础架构并包含多个不同的网络。无论是否被耦合至因特网,任何这样的基础架构可以用于本发明所提供的系统和方法。
网络基础架构可以允许诸如客户机/服务器、对等或混合体系结构等各种网络拓扑结构。“客户机”是使用它无关的另一类或组的服务的一个类或组中的成员。在计算中,客户机是进程,即大致上是请求由另一程序提供的服务的一组指令或任务。客户机进程利用所请求的服务,而不必“知道”关于其它程序或服务本身的任何工作细节。在客户机/服务器体系结构中,尤其在网络化系统中,客户机通常是访问由例如服务器等另一计算机提供的共享的网络资源的计算机。在图7的示例中,取决于环境,任何实体271、272、273、274、275、276、277和278可以被认为是客户机、服务器或两者。
服务器通常,但不必须是可通过诸如因特网等远程或本地网络访问的远程计算机系统。客户机进程可以在第一计算机系统中活动,而服务器进程可以在第二计算机系统中活动,它们通过通信介质彼此通信,从而提供分布式功能并允许多个客户机利用服务器的信息收集能力。任何软件对象可以跨多个计算设备或对象分布。
客户机和服务器利用由协议层提供的功能来彼此通信。例如,超文本传输协议(HTTP)是用于万维网(WWW)或“Web”的常见协议。通常,诸如网际协议(IP)地址或诸如统一资源定位器(URL)等其它引用的计算机网络地址可以用于彼此标识服务器或客户计算机。网络地址可以被称为URL地址。可以通过通信介质来提供通信,例如客户机和服务器可以通过用于大容量通信的TCP/IP连接来彼此耦合。
考虑到可以根据图6中提供的通用架构构建的各种计算环境,以及在诸如图7的网络环境中的计算中可能发生的变化,此处提供的系统和方法不能被解释为以任何方式限于特定的计算体系结构。而是,本发明不应限于任何单个实施例,而是应该根据所附权利要求书的宽度和范围来解释。
结论
此处描述的各种系统、方法和技术可以使用硬件或软件或两者的恰当组合来实现。这样,本发明的方法和设备,或其某些方面或部分,可以采包含在有形介质中的程序代码(即,指令)的形式,有形介质诸如软盘、CD-ROM、硬盘或任何其它机器可读存储介质,其中,当程序代码被加载至诸如计算机等的机器并由其运行时,该机器成为用于实现本发明的装置。在程序代码在可编程计算机上运行的情形中,计算机一般包括处理器、处理器可读的存储介质(包括易失性和非易失性的存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。这样的程序较佳地用高级过程语言或面向对象的编程语言来实现,以与计算机系统通信。然而,如果需要,可以用汇编语言或机器语言来实现程序。在任何情形中,语言可以是编译的或解释的语言,且与硬件实现相结合。
本发明的方法和装置也可以具体化为通过诸如电线或电缆、光纤或任何其它形式的传输等某些传输介质传输的程序代码形式,其中,当程序代码由诸如EPROM、门阵列、可编程逻辑器件(PLD)、客户计算机、录影机等机器接收、加载并运行时,该机器成为用于实现本发明的装置。当在通用处理器上实现时,程序模块结合处理器来提供用于执行本发明的索引功能的独特装置。
尽管结合各附图的较佳实施例描述了本发明,但是可以理解,可以使用其它类似的实施例,或可以对所述实施例进行修改或添加,来用于实现本发明的相同的功能而不背离本发明。例如,尽管在模拟个人计算机功能的数字设备的环境中描述本发明的示例性实施例,但是本领域的技术人员可以认识到,本发明不限于这样的数字设备,如在本申请中所述,本发明可以应用于任何数量的现有或新兴计算设备或环境,诸如游戏控制台、手持式计算机、便携式计算机等,无论它们是有线还是无线的,且可以被应用于通过通信网络连接并跨该网络交互的任何数量的这样的计算设备。而且,应该强调,此处构想了各种计算机平台,包括手持式设备操作系统和其它应用程序专用硬件/软件接口设备,尤其是当无线网络化设备的数量持续增长的时候。从而,本发明不应该限于任何单个实施例,而应根据所附权利要求书的宽度和范围解释。
最后,此处所述的所揭示的实施例可以适于在其它处理器体系结构、基于计算机的系统或系统虚拟化中使用,且此处进行的揭示明确地预期这样的实施例,从而,本发明不应限于此处描述的特定实施例,而可以被最广泛地解释。同样,用于除处理器虚拟化之外的目的的合成指令的使用也可以由此处进行的揭示所预期,且在除了处理器虚拟化之外的环境中,任何这样的合成指令的使用可以最广泛地对此处进行的揭示添加另外的意义。
附录A定义和术语
权利要求
1.一种用于捕捉数据模型的结构的方法,包含基于所述数据模型内的至少一个实体结构来创建实体模式。
2.如权利要求1所述的方法,其特征在于,还包括提供用于确认所述实体模式的应用来确保所述应用遵循所述实体模式的机制。
3.如权利要求2所述的方法,其特征在于,所述提供确认机制的动作包括
提供用于保存实体模式信息作为所述实体模式的应用的一部分的机制;以及
提供用于使用所述保存的实体模式信息检查所述应用是否依附所述实体模式的机制。
4.如权利要求2所述的方法,其特征在于,所述实体模式含有用于检查所述应用是否依附于所述实体模式的至少一个实体角色。
5.如权利要求4所述的方法,其特征在于,还包括
为所述实体角色生成相应的类,所述类具有由所述实体角色描述的结构,其中,第一类允许导航至所述实体模式的其它角色。
6.如权利要求2所述的方法,其特征在于,所述创建实体模式的动作包括
生成声明性地应用的编程模型作为设计所述实体模式的一部分;以及
结合所述编程模型,编写定义所述实体模式的软件代码,而无需对所述实体模式的应用的了解。
7.如权利要求6所述的方法,其特征在于,还包括在所述实体模式中包含声明性地应用的功能。
8.一种其上存储用于执行用于捕捉数据模型的结构的方法的指令的计算机可读介质,所述方法包括基于所述数据模型内的至少一个实体结构来创建实体模式。
9.如权利要求8所述的计算机可读介质,其特征在于,其上存储的指令还用于执行确认所述实体模式的应用来确保所述所述应用遵循所述实体模式的动作。
10.如权利要求9所述的计算机可读介质,其特征在于,所述确认动作包括
保存实体模式信息作为所述实体模式的应用的一部分;以及
使用所述保存的实体模式信息检查所述应用是否依附所述实体模式。
11.如权利要求9所述的计算机可读介质,其特征在于,所述实体模式含有用于检查所述应用是否依附于所述实体模式的至少一个实体角色。
12.如权利要求11所述的计算机可读介质,其特征在于,还包括在其上存储的指令,用于
为所述实体角色生成相应的类,所述类具有由所述实体角色描述的结构,其中,第一类允许导航至所述实体模式的其它角色。
13.如权利要求9所述的计算机可读介质,其特征在于,所述创建实体模式的动作包括
生成声明性地应用的编程模型作为设计所述实体模式的一部分;以及
结合所述编程模型,创建定义所述实体模式的软件代码,而无需对所述实体模式的应用的了解。
14.如权利要求13所述的计算机可读介质,其特征在于,还包括用于在实体模式中包含声明性地应用的功能的其上存储的指令。
15.一种用于使用数据模型的结构的方法,包括
基于所述数据模型内的至少一个实体结构创建实体模式;以及
提供用于生成实体模式专用代码的机制。
16.如权利要求15所述的方法,其特征在于,还包括提供实体角色订阅由实体模式的应用激发的事件的机制,其中,所述实体角色含有与所定义的特性和关系对应的类。
17.如权利要求15所述的方法,其特征在于,还包括提供向所述实体结构的实例查询所应用的实体角色的列表的机制。
18.如权利要求15所述的方法,其特征在于,还包括提供向所述实体结构的实例查询特定实体角色的存在的机制。
19.如权利要求15所述的方法,其特征在于,还包括提供用于确认所述实体模式的应用来确保所述应用遵循所述实体模式的机制。
20.如权利要求15所述的方法,其特征在于,还包括基于所述实体模式的元素自动生成用户界面(UI)。
21.如权利要求20所述的方法,其特征在于,所述生成UI的动作包括
将UI的布局链接至所述实体模式;以及
检查所述实体模式的所应用的实体角色来提供一致的UI。
22.如权利要求15所述的方法,其特征在于,还包括
定义自定义元数据作为所述实体模式的定义的一部分;
提供当应用所述实体模式时指定所述元数据的机制;以及
提供在运行时读取所述自定义元数据的机制。
23.如权利要求15所述的方法,其特征在于,还包括,使用基于所述数据模型内的至少一个实体结构创建的实体模式的元素来自动生成用户界面(UI)。
24.一种其上存储用于执行用于使用数据模型的结构的方法的指令的计算机可读介质,所述方法包括
基于所述数据模型内的至少一个实体结构来创建实体模式;以及
提供用于生成实体模式专用的代码的机制。
25.如权利要求24所述的计算机可读介质,其特征在于,其上存储的指令还用于执行提供实体角色订阅由实体模式的应用激发的事件的机制的其它动作,其中,所述实体角色含有与所定义的特性和关系对应的类。
26.如权利要求24所述的计算机可读介质,其特征在于,其上存储的指令还用于提供向所述实体结构的实例查询所应用的实体角色列表的机制的动作。
27.如权利要求24所述的计算机可读介质,其特征在于,其上存储的指令还用于执行提供向所述实体结构的实例查询特定实体角色的存在的机制的动作。
28.如权利要求24所述的计算机可读介质,其特征在于,其上存储的指令还用于执行提供用于确认所述实体模式的应用以确保所述应用遵循所述实体模式的动作。
29.如权利要求24所述的计算机可读介质,其特征在于,其上存储的指令还用于执行基于所述实体模式的元素自动生成用户界面(UI)的动作。
30.如权利要求29所述的计算机可读介质,其特征在于,所述自动生成UI的动作包括
将UI的布局链接至所述实体模式;以及
检查所述实体模式的所应用的实体角色来提供一致的UI。
31.如权利要求24所述的计算机可读介质,其特征在于,其上存储的指令还用于执行以下动作
定义自定义元数据作为所述实体模式的定义的一部分;
提供当应用所述实体模式时指定所述元数据的机制;以及
提供在运行时读取所述自定义元数据的机制。
32.如权利要求24所述的计算机可读介质,其特征在于,还包括,其上存储的指令还用于执行使用基于所述数据模型内的至少一个实体结构创建的实体模式的元素来自动生成用户界面(UI)的动作。
全文摘要
提供了针对使用实体模式来捕捉数据模型的结构的系统和方法,其中实体模式是抽象,例如在MICROSOFT BUSINESS FRAMEWORK(MBF)中,该抽象在框架的模型编辑器在根层次上的表面,并包含共同定义模型的结构模式的一个或多个实体角色。实体模式可以被认为是上位模型,或模型的模型模板。向实体的设计、所需的特性以及与其它实体(实体角色)的关系添加规定的规则。在设计时确认实体模式的应用。运行时框架支持任何所应用的模式并调用该模式专用的代码。一般的优点是运行时操作是模型驱动的,并在运行时解释模型。应用以及模式的使用是应用程序/软件程序的模型的一部分。
文档编号G06F17/30GK1811752SQ20051000351
公开日2006年8月2日 申请日期2005年12月28日 优先权日2005年1月28日
发明者E·N·克利斯托夫森, L·哈玛, M·R·皮特森, H·H·克劳森, T·黑尔斯伯格 申请人:微软公司