对象属性动态验证制造技术

技术编号:35679551 阅读:23 留言:0更新日期:2022-11-23 14:20
可以增强编程语言框架以提供动态验证。动态验证允许在运行时选择用于任何变量的验证器函数,代替在编程时静态声明。代替用引用特定验证器函数或约束类型的注释来对变量进行注释,程序员可以用指示将在运行时动态选择验证器函数的注释来对变量进行注释。当创建变量的运行时实例时,编程语言框架可以识别变量上的动态验证注释,然后使用变量中的运行时值来确定应当使用哪个(哪些)验证器函数。确定应当使用哪个(哪些)验证器函数。确定应当使用哪个(哪些)验证器函数。

【技术实现步骤摘要】
【国外来华专利技术】对象属性动态验证
[0001]相关申请的交叉引用
[0002]本申请要求于2020年3月4日提交的标题为“DYNAMIC VALIDATION FRAMEWORK EXTENSION”的编号为16/809,025的美国专利申请的权益和优先权,该申请通过引用全文并入本文。

技术介绍

[0003]编程语言最近提供了用于对成员变量、类和函数强制执行约束的高级机构。约束可以被用于验证不同的数据字段,以确保它们满足一个或多个预定义要求中的一些。传统上,约束是使用包括在整个软件中的定制的错误检查代码来强制执行的。但是,作为编程语言框架的一部分,现代编程语言已经开始提供针对约束集合验证数据的机构。程序员无需为每个项目和每个数据集重写约束和验证代码,而是可以代替地使用编程语言框架的约束强制执行机构来提高软件开发的效率和可以验证常见数据类型的一致性。
[0004]例如,Java编程语言提供对强加在类模块或“bean”上的约束的验证。bean验证在JSR 380规范中定义,它允许对Java bean进行静态验证。在静态验证中,bean内部的属性(例如,成员变量)满足一些预定义准则,诸如非空值、非空集、在指定的数值范围内等。如果未满足这些预定义准则,那么框架报告约束违反。验证框架还允许用户创建用户定义的约束和用户定义的验证器。这些允许用户定制各种验证例程以匹配期望的数据格式。

技术实现思路

[0005]现代编程语言框架提供了使用预定义约束对运行时值执行静态验证的构造。当创建运行时实例时,可以将存储在变量和/或成员属性中的运行时值提供给验证器函数,这确保该值符合预定义约束。预定义约束可以包括数字范围、可接受的字符串模式、日期范围、特定格式化和/或可以对数据值强制执行的其它要求。为了激活约束,变量或成员属性可以用引用特定验证器函数的文本字符串进行注释。因此,要用于特定变量的验证器函数是在编程时而不是在运行时设置的。
[0006]本文描述的实施例增强了编程语言框架以提供动态验证。动态验证允许在运行时选择用于任何变量的验证器函数,而不是在编程时静态声明。代替用引用特定验证器函数或约束类型的注释来对变量进行注释,程序员可以用指示将在运行时动态选择验证器函数的注释来对变量进行注释。当创建变量的运行时实例时,编程语言框架可以识别变量上的动态验证注释,然后使用变量中的运行时值来确定应当使用哪个(哪些)验证器函数。
[0007]可以修改编程语言框架以包括附加注释定义。一个注释定义可以被用于注释应当经受如上所述的动态验证的变量。另一个注释定义可以被用于注释用户定义的动态值验证器函数本身。第二个注释可以接收要被动态验证的属性的名称和/或值。例如,类定义可以包括作为键

值对操作的两个成员属性(例如,字符串键、字符串值)。第二个注释可以引用“键”属性并确定“键”属性中的值是否指示这个键

值对存储了电话号码(例如,键=“phone”;值=“571

555

1534”)。验证器函数上使用的注释可以指定当名为“key(键)”的属
性具有“phone(电话)”值时应当使用它,然后验证器函数内部的代码可以验证“值”属性以确定它是否存储了格式正确的电话号码。如果“键”值存储了一些不同的东西,诸如“日期”或“时间”,那么这个验证器将不会在这个类实例上执行。这个决定是由框架在运行时做出的。
[0008]当编程语言框架在运行时接收到被注释用于动态验证的变量时,框架可以首先执行任何传统的静态验证。如果静态验证失败,那么可能不必进行动态验证。在静态验证完成之后,编程语言框架可以生成类路径或程序目录中可用的所有动态验证器函数的列表。可用动态验证器的列表可以包括已经由程序员定义的任何自定义动态值验证器函数。然后,框架可以循环通过可用动态值验证器函数的列表,并且识别带注释变量的运行时值满足动态值验证器函数上带注释约束的任何内容。继续上面的示例,框架可以识别类路径中的电话号码值验证器函数,并且将函数注释中的attributeName=“key”和attributeValue=“phone”约束与变量的运行时值进行比较。然后可以对运行时值执行任何识别出的验证器函数。在一些实施例中,框架可以提供包括用于执行动态验证的受保护的辅助函数的抽象基类,并且这个抽象基类可以在程序员编写的自定义动态值验证器中被覆盖(overridden)。
[0009]这些编程语言框架增强允许程序员在运行时动态选择的不同验证器函数中封装成员属性之间的不同依赖关系(dependency)。当仅使用静态验证时,要求验证器函数包括比较不同可能值的if/then语句的分支。随着代码的发展,这些语句难以随着时间的推移而维护。但是,当使用动态验证时,用于验证的每个变量依赖关系都可以被单独且独立地处理,并且可以通过用添加的依赖关系对新的验证器函数进行注释来轻松添加新的依赖关系而不受限制。
附图说明
[0010]通过参考本说明书的其余部分和附图,可以实现对各种实施例的本质和优点的进一步理解,其中,贯穿若干附图使用相似的附图标记指代相似的组件。在一些情况下,子标记与附图标记相关联以表示多个相似组件中的一个。当在没有指定现有子标记的情况下引用附图标记时,旨在指代所有这样的多个相似组件。
[0011]图1图示了根据一些实施例的用于编程语言的约束验证框架的图。
[0012]图2A图示了根据一些实施例的使用内置约束注释的bean的示例。
[0013]图2B图示了自定义验证器/约束的定义。
[0014]图3图示了根据一些实施例的验证bean中的约束的程序。
[0015]图4图示了根据一些实施例的用于动态验证的框架扩展的图。
[0016]图5图示了根据一些实施例的动态验证约束注释。
[0017]图6图示了根据一些实施例的使用动态验证的bean的示例。
[0018]图7图示了根据一些实施例的添加到定义动态值之间的关系的框架的新注释。
[0019]图8图示了根据一些实施例的用于DynamicValueValidator的抽象类的示例。
[0020]图9A图示了根据一些实施例的DynamicValidator类的定义。
[0021]图9B图示了根据一些实施例的用于DynamicValidator的isValid()函数。
[0022]图9C图示了根据一些实施例的用于DynamicValidator的方法以在DynamicValue
注释中定义的元数据和对应的bean之间执行静态验证和匹配。
[0023]图10A图示了根据一些实施例的用于动态验证的用户定义的自定义动态值验证器的示例。
[0024]图10B图示了根据一些实施例的具有多个约束注释的自定义动态值验证器的示例。
[0025]图11图示了根据一些实施例的其中可以调用动态验证的程序的示例。
[0026]图12图示了根据一些实施例的用于在运行时动态验证变量依赖本文档来自技高网
...

【技术保护点】

【技术特征摘要】
【国外来华专利技术】1.一种包括指令的非暂态计算机可读介质,所述指令在由一个或多个处理器执行时,使得所述一个或多个处理器执行包括以下的操作:在编程语言框架处接收对象的实例,其中对象的定义用约束进行注释;接收用注释进行注释的一个或多个验证器,该注释识别:对象的定义中的属性;以及属性的值;识别所述一个或多个验证器中的验证器,其中对象的实例中的属性的值与该验证器的注释中的属性的值匹配;以及使用对象的实例来执行验证器。2.如权利要求1所述的非暂态计算机可读介质,其中所述验证器验证对象的定义中的第二属性的值。3.如权利要求1所述的非暂态计算机可读介质,其中所述一个或多个验证器包括第二验证器,其中对象的实例中的属性的值与该第二验证器的注释中的属性的值不匹配。4.如权利要求1所述的非暂态计算机可读介质,其中用其对对象的定义进行注释的约束使得编程语言框架使用动态验证而不是静态验证。5.如权利要求4所述的非暂态计算机可读介质,其中编程语言框架包括针对用其对对象的定义进行注释的约束的定义,其中针对约束的所述定义指定该约束可以在对象类型目标上执行。6.如权利要求1所述的非暂态计算机可读介质,其中编程语言框架包括针对用其对所述一个或多个验证器进行注释的注释的定义,其中该定义包括属性名称和属性值模式。7.如权利要求1所述的非暂态计算机可读介质,其中编程语言框架包括所述一个或多个验证器中的每个验证器从其继承的抽象类的定义。8.如权利要求7所述的非暂态计算机可读介质,其中所述抽象类包括确定约束是否对对象有效的抽象函数。9.如权利要求7所述的非暂态计算机可读介质,其中所述抽象类包括对照自定义约束对对象进行验证的受保护函数。10.如权利要求1所述的非暂态计算机可读介质,其中编程语言框架包括扫描类路径并识别该类路径中的所述一个或多个验证器中的每个验证器的类的定义。11.如权利要求10所述的非暂态计算机可读介质,其中类的定义包括过滤掉所述一个或多个验证器中的验证器的函数,其中对象的实例中的属性的值与所述一个或多个验证器中的所述验证器的注释中的...

【专利技术属性】
技术研发人员:P
申请(专利权)人:甲骨文国际公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1