外文翻译-陶瓷厂的进销存管理系统_第1页
外文翻译-陶瓷厂的进销存管理系统_第2页
外文翻译-陶瓷厂的进销存管理系统_第3页
外文翻译-陶瓷厂的进销存管理系统_第4页
外文翻译-陶瓷厂的进销存管理系统_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

0外文资料Agooddatavalidationstrategyisanimportantpartofeveryapplicationdevelopmentproject.Beingabletoconsolidateandgeneralizevalidationusingaprovenframeworkcansignificantlyimprovethereliabilityofyoursoftware,especiallyovertime.Whereasunstructuredanduncontrolledvalidationpolicieswillleadtoincreasedsupportandmaintenancecosts,aconsolidatedvalidationstrategycansignificantlyminimizethecascadeeffectofchangestoyourcodebase.Avalidationlayercanalsobeaveryusefultoolforsometypesofdebugging.Irecentlyneededtoimplementalightweightvalidationframeworkforaproject.IdiscoveredHibernateValidator,anopensourceprojectfromJBoss.Theframeworkimpressedmewithitssimplicityandflexibility,soIamintroducingitwiththisJavaTip.IllsharemyexperiencewithsettingupandusingHibernateValidator,withsimpleusecasesthatdemonstratekeyfeaturessuchasdeclarativeannotations,compositevalidationrules,andselectivevalidation.DatavalidationinJavaSeeVictorOkunevsValidationwithpureJavatolearnmoreaboutthejava.beanspackageandthelogicofconstrainedpropertiesinJava.GettingstartedwithHibernateValidatorHibernateValidatorprovidesasolidfoundationforbuildinglightweight,flexiblevalidationcodeforJavaSEandJavaEEapplications.HibernateValidatorissupportedbyanumberofpopularframeworks,butitslibrariescanalsobeusedinastandaloneimplementation.StandaloneJavaSEvalidationcomponentscanbecomeanintegralpartofanycomplexheterogeneousserver-sideapplication.InordertofollowthisintroductiontousingHibernateValidatortobuildastandalonecomponent,youwillneedtohaveJDK6orhigherinstalled.AllusecasesinthearticlearebuiltusingValidatorversion5.0.3.Youshould1downloadtheHibernateValidator5.0.xbinarydistributionpackage,wheredirectoryhibernate-validator-5.0.x.Finaldistcontainsallthebinariesrequiredforstandaloneimplementation.DownloadthesourcecodefortheHibernateValidatordemosusedinthisarticle.Listing1showsafragmentoftheAnt-builtscriptwhereallbinarydependencies,selectedforthestandaloneimplementation,arelistedunderthemanifestsection.Themetainfsectionisrequiredifexternalizedmetadatavalidationwillbeusedintheimplementation.AsaresultoftheAntbuildthefinalJARwillreferencealldependentValidatorJARsthroughtheClass-Pathheaderofthemanifestfile.Listing1.ManifestsectionoftheAntbuildwithdependencies.2DeclarativeannotationandconstraintdefinitionHibernateValidator5.0.xistheopensourcereferenceimplementationofJSR349:BeanValidation1.1.DeclarativeannotationandconstraintdefinitionaretwohighlightsoftheupdatedBeanValidation1.1framework.Expressingvalidationrulesthroughadeclarativesyntaxgreatlyimprovesthereadabilityofthecode,asshowninListing2.Listing2.DeclarativeannotationsinHibernateValidatorpublicclassAddressNotBlankprivateStringaddresseeName;.NotBlankPattern(regexp=A-Za-zdA-Za-zs?dA-Za-zd,message=Postalcodevalidationfailed.)privateStringpostalCode;NotBlankprivateStringmunicipality;NotBlankPattern(regexp=AB|BC|MB|NB|NL|NT|NS|NU|ON|PE|QC|SK|YT,message=Provincecodevalidationfailed.)privateStringprovince;.3Declarativevalidationonmethodparametersclearlydefinepreconditions,improvingtheoverallreadabilityofthecode.Businessrulesaremucheasiertodigestbecauseyouonlyneedtolookatfield,method,andclassannotations.Thedeclarativestyleremovestheneedtobuildamodelofexecution,considerstatetransitions,andanalyzepost-conditionsandpreconditionswhilelearningthecode.MoreHibernateannotationsLearnhowtogeneratedatabaseschemasautomaticallywithHibernate.SeeJohnFergusonSmartsCustomschemagenerationwithHibernateannotations.Listing3.ValidationrulesappliedtoacompositionofobjectsabstractpublicclassLetterTemplate.NotEmpty(groups=LetterTemplateChecks.class,payload=ValidationSeverity.Error.class)ValidprivateListcontent;.Supportedvalidationtargetsarenotrestrictedtodataonly:itispossibletoapplyconstraintstobeanpropertiesgetmethods,methodparameters,andconstructors.CompositevalidationrulesReadabilityandflexibilitydontalwaysworknicelytogetherinsourcecode;infactthey4oftencompete.HibernateValidatordemonstratesasetupwherethesetwocharacteristicscanactuallycomplementeachother.Forexample,HibernateValidatorsupportscompositionsofannotations.TheframeworksupportscompositionsofconstraintsandprovidessyntacticalconstructsrepresentingOR,AND,andALL_FALSEvalidationsemantics.TheORcompositionoffersstereotypestoskipvalidationonemptyornullfieldsandishelpfulwhenthereisaneedtodeclarevalidationforincompleteoroptionaldata.InListing4,HibernateValidatorsPatternannotationisconvertedintoanoptionalvalidationruleusingannotationcompositionsyntax.Listing4.CustomannotationdeclarationfordefiningORtypeconstraints(nullornumericfieldthatcannotstartwith0)ConstraintComposition(CompositionType.OR)Null(message=)Pattern(regexp=1-9d*)Target(ElementType.METHOD,ElementType.FIELD)Retention(RetentionPolicy.RUNTIME)Constraint(validatedBy=)ReportAsSingleViolationDocumentedpublicinterfaceNullOrNumberStringmessage()defaultValidationforanoptionalnumericfieldfailed.;Classgroups()default;5Classpayload()default;Listing5demonstratestheuseofthecustomcompositeannotationontheoptionalpostalboxpropertyoftheAddressobject.Listing5.DeclaringavalidationrulewherethepropertycanbeeithernulloranumberpublicclassAddress./OptionalfielddefiningPOboxNullOrNumberprivateStringpoBoxNumber;.ClassifyingvalidationrulesHibernateValidatorletsdevelopersclassifyvalidationrules.Thismeans,forexample,thatyoucouldassociateadifferentruntimestrategywithvaryinglevelsoffailure.Theframeworksupportsanannotationpayloadattribute,whichcanbeusedincombinationwithJavamarkerinterfacestoclassifyvalidationrules.Youcanalsolinktheseverityofvalidationfailureswithdifferentlevelsofloggingseverity,wheretheloggingstrategyisconfigurableatruntime.Considerthesimplestpossibleclassification,wherethevalidationrulesareassociatedwithnon-recoverableerrorsorwarnings.6Listing6.MarkerpayloadinterfacesdefinedforclassificationpublicclassValidationSeveritypublicinterfaceErrorextendsPayloadpublicinterfaceWarningextendsPayloadInListing6,theValidationSeverityinterfaceclassisusedasaparameterinavalidation-ruledeclaration.Youcouldusethesametechniqueforcustomannotations:Listing7.MarkingvalidationconstraintsaserrorsorwarningspublicclassMailLetterTemplateextendsLetterTemplateNotNull(payload=ValidationSeverity.Warning.class)privateAddressreturnAddress;NotNull(payload=ValidationSeverity.Error.class)privateAddressrecipientAddress;.InListing8,warning-levelvalidationfailuresareloggedattheinfolevel,whileerrorsare7loggedattheerrorlevel.Listing8.Associatinglogginglevelwithvalidationerrorsorwarningsfor(ConstraintViolationerror:constraintViolations)if(error.getConstraintDescriptor().getPayload().iterator().next().equals(ValidationSeverity.Warning.class)StmtValLog.getInstance().info(Property+error.getPropertyPath().toString()+runtimevalue+error.getInvalidValue()+.Warninglevelconstraintviolation:+error.getMessage();if(error.getConstraintDescriptor().getPayload().iterator().next().equals(ValidationSeverity.Error.class)StmtValLog.getInstance().error(Property+error.getPropertyPath().toString()+runtimevalue+error.getInvalidValue()+.Errorlevelconstraintviolation:+error.getMessage();8SelectivevalidationandthemarkerinterfacetechniqueHibernateValidatoralsoletsyouapplyvalidationlogicselectivelyatruntime,addinganotherdimensionofflexibility.Thistechniqueishelpfulifthestateofthesystemandunderlyingobjectstructuresgoesthroughawell-definedsetoftransitions.Forexample,inaclasshierarchywherederivedclassescanbeinanincompletestate,whilebaseclassstatehastobecompleteeveryclasscanbeassociatedwithadifferentlevelofvalidation.Usethe(groups)markerinterfacetechniquetoseparatevalidationrulesintodifferentcategories.Inthistechnique,amarkerinterfaceclassispassedasagroupsparametertoanannotationdeclaration.Listing9.MarkerinterfacedeclarationandusageintwoclassespublicinterfaceMailLetterTemplateChecks.publicinterfaceEmailLetterTemplateChecks.finalpublicclassMailLetterTemplateextendsLetterTemplateNullOrNotBlank(groups=MailLetterTemplateChecks.class,payload=ValidationSeverity.Warning.class)privateAddressreturnAddress;NotNull(groups=MailLetterTemplateChecks.class,payload=9ValidationSeverity.Error.class)privateAddressrecipientAddress;finalpublicclassEmailLetterTemplateextendsLetterTemplateprivateImagelogo;NotBlank(groups=EmailLetterTemplateChecks.class,payload=ValidationSeverity.Error.class)privateStringsubject;Email(groups=EmailLetterTemplateChecks.class,payload=ValidationSeverity.Error.class)privateStringrecipientEmail;InListing10,validationisrestrictedtorulesmarkedbytwoclasses:LetterTemplateChecksandEmailLetterTemplateChecks.Listing10.SelectivevalidationofanemailobjectEmailLetterTemplateemail=newEmailLetterTemplate();email.setSubject(Renewalletter);email.setContent(newArrayList();email.setSignature(SergeLaval);SetconstraintViolations=validator.validate(email,LetterTemplateChecks.class,EmailLetterTemplateChecks.class);10for(ConstraintViolationerrors:constraintViolations)System.out.println(Property+errors.getPropertyPath().toString()+runtimevalue+errors.getInvalidValue()+.Constraintviolation:+errors.getMessage();Selectivevalidationcanbeusedasapowerfuldebuggingtechnique,whereonlyasubsetoftheobjecthierarchyhastobeverifiedatagiventime.ExternalizedmetadatavalidationInadditiontodeclarativeannotation-basedvalidation,theBeanValidation1.1specificationsupportsavalidationmetadatamodelandprogrammaticvalidationAPIs.Thevalidationmetadatamodelcanbeusedasaneffectivecontrolmechanismatruntimewithouttheneedtorebuildcode.Avarietyofcontrolmechanismscanbeemployedincontrollingvalidationpoliciesatruntime,rangingfromdisablingprogrammaticallydefinedvalidationconstraintstocomplimentingprogrammaticallydefinedrules.Metadataconfigurationhasseveraladvancedoptionsavailable.SeetheHibernateValidatordocumentationforthecompletesetofoptions.Inordertoenablemetadatavalidation,anvalidation.xmlfilehastobeavailableontheclasspath.Constraint-mappingfieldsrefertoXMLdescriptorswhereapplication-specificconstraintsaredefined.Listing11.AHibernateconfigurationfile,validation.xmlstmnts_declarative_validation.xmlfalseIfyouredoingvalidationprogrammatically,thevalidatemethodoftheValidatorclassacceptsalistofmarkerinterfaceclassesasparameters,definingthescopeofaselectivevalidation.Bydefault,allvalidationrulesbelongtoadefaultvalidationgroup,whichisdesignatedbyDefault.class.外文翻译良好的数据验证策略是每个应用程序开发项目的重要组成部分。如果能够利用经过验证的架构,以巩固和推广验证可以显著提高软件的可靠性,特别是随着时间的推移。而非结构化和不受控制的验证政策将导致更多的支持和维护成本,综合验证策略可以显著减少改变你的代码库的连带效应。一个验证层也可以为某些类型的调试非常12有用的工具。我最近需要实现一个轻量级的验证框架的一个项目。我发现了HibernateValidator的,从JBoss的一个开源项目。该框架给我的印象与它的简单性和灵活性,所以我用这个Java技巧介绍它。我将与设置和使用HibernateValidator的分享我的经验,与展示关键功能,如声明式注解,复合验证规则,以及选择性验证简单的用例。在Java中的数据验证见VictorOkunev的ValidationwithpureJava,以了解更多有关java.beans包和Java中的约束性的逻辑。开始使用HibernateValidatorHibernate验证器为构建轻量级的,灵活的验证代码为JavaSE和JavaEE应用程序打下坚实的基础。Hibernate验证器是由一些流行的框架为支持,但它的库也可以在一个独立的实现中使用。独立的JavaSE验证组件可以成为任何复杂的异构服务器端应用程序的一个组成部分。为了遵循这个介绍使用HibernateValidator建立一个独立的组件,需要有JDK6或更高版本。所有的用例在文章中使用验证器版本5.0.3构建。你应该下载HibernateValidator的5.0.x的二进制发行包,其中directoryhibernate-validator-5.0.x.Finaldist区包含所有需要独立实施的二进制文件。下载这篇文章中所使用的HibernateValidator的源代码。Listing1显示了所有的二进制依赖关系,选择了独立实施,列在清单部分Ant的构建脚本的片段。所需的metainf部分,如果外部化元数据验证将在实现中使用。由于Ant构建最终的JAR的结果会参考所有相关的验证器的JAR文件通过manifest文件中的Class-Path头。Listing1.ManifestsectionoftheAntbuildwithdependencies.声明标注和约束定义HibernateValidator的5.0.x的是开源参考实现JSR349:Bean验证1.1。声明标注和约束定义是两个亮点更新Bean验证1.1框架。通过声明性语法表达的验证规则大大提高了代码的可读性,如Listing2所示。Listing2.DeclarativeannotationsinHibernateValidatorpublicclassAddressNotBlankprivateStringaddresseeName;.NotBlankPattern(regexp=A-Za-zdA-Za-zs?dA-Za-zd,message=Postalcodevalidationfailed.)privateStringpostalCode;NotBlankprivateStringmunicipality;NotBlankPattern(regexp=AB|BC|MB|NB|NL|NT|NS|NU|ON|PE|QC|SK|YT,message=14Provincecodevalidationfailed.)privateStringprovince;.在方法参数的声明性验证明确的前提条件,提高了代码的整体可读性。业务规则是非常容易消化,你只需要看看字段,方法和类的注解。声明风格消除了需要建立一个执行模型,考虑状态转换,并同时学习了代码分析后置条件和前提条件。更多的Hibernate注解约束条件可以通过使用有效注解应用到对象的组合物。在Listing2中,有效期是用来申请验证,依赖bean的图形,执行简单的验证规则和复杂的依赖约束。Listing3.ValidationrulesappliedtoacompositionofobjectsabstractpublicclassLetterTemplate.NotEmpty(groups=LetterTemplateChecks.class,payload=ValidationSeverity.Error.class)ValidprivateListcontent;.支持验证的目标并不只限于数据:它可以限制应用到bean的属性get方法,方法参数和构造。复合验证规则可读性和灵活性并不总是很好地协同工作中的源代码。事实上,他们往往竞争。HibernateValidator的演示设置,其中这两个特点其实可以相得益彰。例如,Hibernate验证支持注释的成分。该框架支持约束的组合物,并提供OR,AND和ALL_FALSE验证语义。OR提供定型跳过验证对空或空字段,并且是有益的,当有需要申报验证不完整的或可选的数据。15在Listing4中,Hibernate验证的图案注释被转换成使用注释语法组成一个可选的验证规则。Listing4.CustomannotationdeclarationfordefiningORtypeconstraints(nullornumericfieldthatcannotstartwith0)ConstraintComposition(CompositionType.OR)Null(message=)Pattern(regexp=1-9d*)Target(ElementType.METHOD,ElementType.FIELD)Retention(RetentionPolicy.RUNTIME)Constraint(validatedBy=)ReportAsSingleViolationDocumentedpublicinterfaceNullOrNumberStringmessage()defaultValidationforanoptionalnumericfieldfailed.;Classgroups()default;Classpayload()default;Listing5演示了使用上的Address对象的可选的邮政箱属性中的自定义复合注解。Listing5.DeclaringavalidationrulewherethepropertycanbeeithernulloranumberpublicclassAddress16./OptionalfielddefiningPOboxNullOrNumberprivateStringpoBoxNumber;.判断验证规则Hibernate验证器允许开发人员进行分类验证规则。这意味着,例如,可以将一个不同的运行策略具有不同故障的级别相关联。该框架支持一个注解有效载荷属性,该属性可以被用于与Java标志接口组合,以验证规则进行分类。您还可以链接的验证失败的严重程度与不同级别的日志记录严重,这里的日志策略是在运行时配置的。考虑最简单的分类,验证规则与不可恢复的错误或警告有关。Listing6.MarkerpayloadinterfacesdefinedforclassificationpublicclassValidationSeveritypublicinterfaceErrorextendsPayloadpublicinterfaceWarningextendsPayload在Listing6中,ValidationSeverity接口类被用作验证规则声明的参数。你可以使用同样的技术用于自定义注解:17Listing7.MarkingvalidationconstraintsaserrorsorwarningspublicclassMailLetterTemplateextendsLetterTemplateNotNull(payload=ValidationSeverity.Warning.class)privateAddressreturnAddress;NotNull(payload=ValidationSeverity.Error.class)privateAddressrecipientAddress;.在Listing8中,警告级别验证失败是在info级别记录,而错误会被记录在错误级别。Listing8.Associatinglogginglevelwithvalidationerrorsorwarningsfor(ConstraintViolationerror:constraintViolations)if(error.getConstraintDescriptor().getPayload().iterator().next().equals(ValidationSeverity.Warning.class)StmtValLog.getInstance().info(Property+error.getPropertyPath().toString()+runtimevalue+error.getInvalidValue()+.Warninglevelconstraintviolation:+error.getMessage();18if(error.getConstraintDescriptor().getPayload().iterator().next().equals(ValidationSeverity.Error.class)StmtValLog.getInstance().error(Property+error.getPropertyPath().toString()+runtimevalue+error.getInvalidValue()+.Errorlevelconstraintviolation:+error.getMessage();选择性的验证和标记接口技术Hibernate验证器,您还可以有选择地应用验证逻辑在运行时增加灵活性。这种技术是有益的,如果系统及相关对象结构的状态经过一个定义良好的一套过渡。例如,在一个类层次结构中的派生类可以在一个不完全的状态,而基类的状态必须是完整的,每一个类可以有不同级别的验证相关联。使用(组)标记接口技术,独立的验证规则为不同的类别。在这种技术中,一个标记接口类是通过为组参数来注解声明。Listing9.MarkerinterfacedeclarationandusageintwoclassespublicinterfaceMailLetterTemplateChecks.publi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论