验证属性转换方法和装置
技术领域
本发明涉及通信领域,具体而言,涉及一种验证属性转换方法和装置。
背景技术
名词解释:
名词一:元数据
例如,一张数据表Customer,包含如下列:{Id、Name,Email,Address},这张表包含如下几行数据:{1,张三,zhangsan@163.com,”北京市”},{2,李四,lisi@163.com,”北京市”},这些称为数据,而元数据也是一种数据,是关于数据的数据,比如这里的元数据不是说张三李四这些信息,而是说数据库中包含了哪些表、表中包含了哪些列,也就是Customer{Id、Name,Email,Address}这个就是元数据;
又比如,定义一个类Customer,包含如下属性:{Id、Name,Email,Address},我们可以使用这个类创建多个对象,比如创建如下两个对象{1,张三,zhangsan@163.com,”北京市”},{2,李四,lisi@163.com,”北京市”},这些称为数据,而元数据指的就是程序集中定义了哪些类,这些类包含哪些方法、属性、字段等等,也就是说Customer{Id、Name,Email,Address}这个就是元数据。
名词二:Attribute
属性,也即附加到类上的元数据,是由开发者定义的。运行时,负责属性验证的对象就会提取这些元数据,查看对象状态是否符合Attribute的要求,使用上述的Customer举例说明:
为Customer的Name属性应用StringLengthAttribute,这个Attribute用于要求属性包含的字符最小和最大个数,如果定义如下对象{1,张三,zhangsan@163.com,”北京市”},在运行时负责属性验证的对象就会检查这个对象中的Name属性(即张三)是否符合StringLengthAttribute的要求。
名词三:分部类
同一个类在多个文件中定义,这个类就称为分部类。
名词四:OR Mapping
将数据库中的表映射称为面向对象中的类。
名词五:Microsoft Silverlight
即:Silverlight,中文名“微软银光”,是一种新的页面(Web)呈现技术,能在各种平台上运行。借助该技术,您将拥有内容丰富、视觉效果绚丽的交互式体验,而且,无论是在浏览器内、还是在桌面操作系统(如Windows和Apple Macintosh)中,用户都可以获得这种一致的体验。
对于开发设计人员而言,Silverlight是一种融合了微软的多种技术的Web呈现技术。它提供了一套开发框架,并通过使用基于向量的图像图层技术,支持任何尺寸图像的无缝整合,对基于ASP.NET、AJAX在内的Web开发环境实现了无缝连接。Silverlight使开发设计人员能够更好的协作,有效地创造出能在Windows和Macintosh上多种浏览器中运行的内容丰富、界面绚丽的Web应用程序——Silverlight应用程序。
名词六:ASP.NET
一项微软公司的技术,是一种使嵌入网页中的脚本可由因特网服务器执行的服务器端脚本技术。指动态服务器页面(Active Server Pages),运行于互联网信息服务(Internet Information Services,简称为IIS)之中的程序。
在相关技术中,Silverlight和.NET之间共有的验证方式是使用属性(Attribute)的方式进行验证,发明人发现,为了能够使属性验证机制对于Silverlight和.NET都起作用,相关技术中采用的技术方案存在下列缺陷:
方案一:在.NET和Silverlight工程中分别添加两个类文件,这两个类文件定义一模一样,都添加同样的验证Attribute。
缺陷:在方案一中,类文件不能在Silverlight和.NET工程之间共享,如果需要修改验证规则,则需要在Silverlight和.NET工程之间同时修改。
方案二:在.NET工程中添加类文件,文件中添加了验证Attribute,在Silverlight工程中通过链接的方式将这个类文件添加进来,而不是将这个类文件复制到Silverlight工程中,从而使得这个类文件可以被.NET和Silverlight工程共享。
缺陷:.NET工程中添加类文件不能包含Silverlight不支持的Attribute,比如元数据类型的属性(MetadataTypeAttribute),否则Silverlight工程会出现编译错误,因为Silverlight的运行时是.NET运行时的子集,没有包含.NET中的所有类(例如,应用MetadataTypeAttribute的类);一个典型的场景就是对于使用OR Mapping工具自动生成的类,都是通过在分部类中应用MetadataTypeAttribute来指定该类应用的验证属性(ValidationAttribute),方案二无法在该场景中使用。
针对相关技术中.NET工程中存在不能直接与Silverlight工程共享的验证属性所导致的问题,目前尚未提出有效的解决方案。
发明内容
本发明提供了一种验证属性转换方法和装置,以至少解决上述问题。
根据本发明的一个方面,提供了一种验证属性转换方法,包括:确定.NET工程中待共享给Silverlight工程的类;获取每个待共享给Silverlight工程的类所应用的验证属性;将所述验证属性转换为所述Silverlight工程的类可支持的验证属性。
优选地,在将所述验证属性转换为所述Silverlight工程支持的验证属性之前,所述方法还包括:确定所述验证属性中所述Silverlight工程的类未支持的验证属性;其中,将所述验证属性转换为所述Silverlight工程的类可支持的验证属性包括:获取所述验证属性中所述Silverlight工程的类支持的验证属性;将所述验证属性中所述Silverlight工程的类未支持的验证属性转换为所述Silverlight工程的类可支持的验证属性。
优选地,所述Silverlight工程的类未支持的验证属性包括:元数据类型的验证属性。
优选地,确定所述.NET工程中待共享给所述Silverlight工程的类包括:判断所述.NET工程中的每个类是否应用预定属性;确定应用所述预定属性的类为所述.NET工程中待共享给所述Silverlight工程的类。
优选地,所述预定属性包括:系统预定义的属性或用户定义的属性。
优选地,在将所述验证属性转换为所述Silverlight工程的类可支持的验证属性之后,所述方法还包括:将所述Silverlight工程的类可支持的验证属性输出到所述Silverlight工程中对应的类中。
根据本发明的另一个方面,还提供了一种验证属性转换装置,包括:第一确定模块,用于确定.NET工程中待共享给Silverlight工程的类;获取模块,用于获取每个待共享给Silverlight工程的类所应用的验证属性;转换模块,用于将所述验证属性转换为所述Silverlight工程的类可支持的验证属性。
优选地,所述装置还包括:第二确定模块,用于确定所述验证属性中所述Silverlight工程的类未支持的验证属性;其中,所述转换模块还包括:获取单元,用于获取所述验证属性中所述Silverlight工程的类支持的验证属性;转换单元,用于将所述验证属性中所述Silverlight工程的类未支持的验证属性转换为所述Silverlight工程的类可支持的验证属性。
优选地,所述第一确定模块包括:判断单元,用于判断所述.NET工程中的每个类是否应用预定属性;确定单元,用于确定应用所述预定属性的类为所述.NET工程中待共享给所述Silverlight工程的类。
优选地,所述装置还包括:输出模块,用于将所述Silverlight工程的类可支持的验证属性输出到所述Silverlight工程中对应的类中。
通过本发明,采用确定.NET工程中待共享给Silverlight工程的类;获取每个待共享给Silverlight工程的类所应用的验证属性;将该验证属性转换为Silverlight工程的类可支持的验证属性的方式,解决了.NET工程中存在不能直接与Silverlight工程共享的验证属性所导致的问题,从而实现了包含不能直接共享的验证属性的类文件在Silverlight和.NET工程之间的共享。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的验证属性转换方法的流程示意图;
图2是根据本发明实施例的验证属性转换装置的结构示意图;
图3是根据本发明实施例的验证属性转换装置的优选结构示意图一;
图4是根据本发明实施例的验证属性转换装置的优选结构示意图二;
图5是根据本发明实施例的验证属性转换装置的优选结构示意图三;
图6是根据本发明优选实施例的在Silverlight和.NET之间共享验证的方法的流程示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本实施例提供了一种验证属性转换方法,图1是根据本发明实施例的验证属性转换方法的流程示意图,如图1所示,该流程包括如下步骤:
步骤S102,确定.NET工程中待共享给Silverlight工程的类;
步骤S104,获取每个待共享给Silverlight工程的类所应用的验证属性;
步骤S106,将验证属性转换为Silverlight工程的类可支持的验证属性。
通过上述步骤,将.NET工程中每个待共享给Silverlight工程的类的所应用的验证属性转换为Silverlight工程的类可支持的验证属性的方式,相对于相关技术中的方案一而言,本实施例提供的方案实现了类文件的共享,相对于相关技术中的方案二而言,本实施例实现了包含不能直接共享的验证属性的类文件在Silverlight和.NET工程之间的共享,从而具有更广泛的应用场景,解决了.NET工程中存在不能直接与Silverlight工程共享的验证属性所导致的问题。
优选地,在将待共享给Silverlight工程的类所应用的验证属性转换为Silverlight工程支持的验证属性之前,还可以包括:确定待共享给Silverlight工程的类所应用的验证属性中Silverlight工程的类未支持的验证属性;其中,对于待共享给Silverlight工程的类所应用的验证属性中Silverlight工程的类能够支持的验证属性,直接获取并可以不需要其他的处理;对于待共享给Silverlight工程的类所应用的验证属性中Silverlight工程的类尚未支持的验证属性,则转换为Silverlight工程的类可支持的验证属性。例如:Silverlight工程的类未支持的验证属性可以包括:元数据类型的验证属性(MetadataTypeAttribute),在Silverlight工程的类尚未支持的验证属性为元数据类型的验证属性的情况下,分别提取该元数据类型的验证属性中的验证属性,其中,提取出的验证属性是Silverlight工程的类可支持的验证属性。
在.NET工程中有许多类,其中可以是一部分或者全部类是需要共享给Silverlight工程的,在将全部类共享给Silverlight工程的情况下,则需要对全部类的验证属性进行检查,并根据情况进行转换。优选地,在更多场景下,只需要共享一部分类给Silverlight工程,此时,可以通过预定属性判断该类是否共享给Silverlight工程。例如,确定.NET工程中待共享给Silverlight工程的类包括:判断.NET工程中的每个类是否应用预定属性;确定应用预定属性的类为.NET工程中待共享给Silverlight工程的类。
优选地,其中预定属性可以是系统预定义的属性,例如名为TableAttribute的自定义属性;或者,该预定属性也可以是用户自定义的,例如,用户可以定义一个名为ShareAttribute的自定义属性来标识该类是需要共享给Silverlight的。
优选地,在将验证属性转换为Silverlight工程的类可支持的验证属性之后,可以将Silverlight工程的类可支持的验证属性输出到Silverlight工程中对应的类中。
本实施例还提供了一种验证属性转换装置,该装置用于实现上述验证属性转换方法,该装置的功能实现已经在上述方法实施例中进行了说明,在此将不再赘述。
图2是根据本发明实施例的验证属性转换装置的结构示意图,如图2所示,该装置包括:第一确定模块22、获取模块24和转换模块26,其中,第一确定模块22,用于确定.NET工程中待共享给Silverlight工程的类;获取模块24耦合至第一确定模块22,用于获取待共享给Silverlight工程的每个类所应用的验证属性;转换模块26耦合至获取模块24,用于将验证属性转换为Silverlight工程的类可支持的验证属性。
本发明的实施例中所涉及到的模块、单元可以通过软件的方式实现,也可以通过硬件的方式来实现。本实施例中的所描述的模块、单元也可以设置在处理器中,例如,可以描述为:一种处理器包括第一确定模块22、获取模块24和转换模块26。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,第一确定模块还可以被描述为“用于确定.NET工程中待共享给Silverlight工程的类的模块”。
图3是根据本发明实施例的验证属性转换装置的优选结构示意图一,如图3所示,优选地,该装置还包括:第二确定模块32耦合至获取模块24和转换模块26,用于确定验证属性中Silverlight工程的类未支持的验证属性;其中,转换模块26还包括:获取单元262耦合至第二确定模块32,用于获取验证属性中Silverlight工程的类支持的验证属性;转换单元264耦合至第二确定模块32,用于将验证属性中Silverlight工程的类未支持的验证属性转换为Silverlight工程的类可支持的验证属性。
优选地,Silverlight工程的类未支持的验证属性包括:元数据类型的验证属性。
图4是根据本发明实施例的验证属性转换装置的优选结构示意图二,如图4所示,优选地,第一确定模块22包括:判断单元222,用于判断.NET工程中的每个类是否应用预定属性;确定单元224耦合至判断单元222,用于确定应用预定属性的类为.NET工程中待共享给Silverlight工程的类。
优选地,预定属性包括:系统预定义的属性或用户定义的属性。
图5是根据本发明实施例的验证属性转换装置的优选结构示意图三,如图5所示,优选地,该装置还包括:输出模块52耦合至转换模块26,用于将Silverlight工程的类可支持的验证属性输出到Silverlight工程中对应的类中。
下面结合优选实施例进行描述和说明。
本优选实施例提供了一种在Silverlight和.NET之间共享验证的解决方案。
在本发明实施例中,并不限于使用何种装置来实现各功能。在本优选实施例中,使用T4模板为例,实现在Silverlight工程中自动生成和.NET工程中同样的类,并且应用同样的ValidationAttribute。
所有应用了ValidationAttribute的类都定义在.NET工程中,图6是根据本发明优选实施例的在Silverlight和.NET之间共享验证的方法的流程示意图,如图6所示,包括如下步骤:
步骤S1,加载.NET工程的程序集;
步骤S2,遍历这个程序集中所有类,读取所有需要在Silverlight和.NET之间共享的类,这里我们判断的规则是检查该类是否应用了TableAttribute,如果是的话,就认为该类需要在Silverlight和.NET之间共享,但是本发明优选实施例并不局限于TableAttribute,使用TableAttribute只是实现最终目标的一种方式,这里可以使用多种方式判断类是否需要在Silverlight和.NET之间共享,比如,可以自定义一个ShareAttribute;
步骤S3,读取每个类中应用的ValidationAttribute,例如:RequiredAttribute;StringLengthAttribute;RegularExpressionAttribute;RangeAttribute;DataTypeAttribute;EnumDataTypeAttribute;CustomValidationAttribute;MetadataTypeAttribute。
步骤S4,如果类应用的ValidationAttribute不是MetadataTypeAttribute,则可以原封不动的输出到目标类文件中;
步骤S5,如果类应用了MetadataTypeAttribute的话,通过这个Attribute的MetadataClassType属性获取元数据类;其中,MetadataTypeAttribute主要用于指定元数据类,指定的元数据类主要就是为应用MetadataTypeAttribute的类定义元数据。
步骤S6,遍历元数据类中应用的ValidationAttribute,将这些Attribute输出到目标类中。
通过上述优选实施例,可以自动在Silverlight工程中生成类文件,不需要手动添加类文件,手动为类文件添加ValidationAttribute,每次修改验证规则后,只要重新(手动或者自动运行)T4模板文件,在Silverlight工程中就会自动更新生成的类文件,不需要手动更新类文件,实现了自动化Silverlight和.NET之间属性验证,从而解决了Silverlight中类无法应用MetadataTypeAttribute的问题。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上上述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。