当前位置: 首页 > news >正文

天津住房和城乡建设厅官方网站手机网页视频提取工具

天津住房和城乡建设厅官方网站,手机网页视频提取工具,手机网站绑定域名是什么意思,淮安企业网站制作java 正在验证应用程序我经常看到的项目几乎没有任何有意识的数据验证策略。 他们的团队在截止日期#xff0c;明确要求的巨大压力下工作#xff0c;只是没有足够的时间以适当且一致的方式进行验证。 因此#xff0c;数据验证代码随处可见#xff1a;JavaScript片段#x… java 正在验证应用程序 我经常看到的项目几乎没有任何有意识的数据验证策略。 他们的团队在截止日期明确要求的巨大压力下工作只是没有足够的时间以适当且一致的方式进行验证。 因此数据验证代码随处可见JavaScript片段Java屏幕控制器业务逻辑bean域模型实体数据库约束和触发器。 这段代码充满了if-else语句引发了各种未经检查的异常很难找到可以验证该死数据的正确位置……所以过了一段时间当项目足够长时它变得非常困难保持此验证的一致性和后续要求非常昂贵正如我所说这些要求通常很模糊。 有没有办法以一种优雅标准和简洁的方式进行数据验证 不会成为无法阅读的罪过的方法是帮助我们将大多数数据验证逻辑保持在一起的方法以及流行的Java框架的开发人员已经为我们完成了大部分代码的方法 就在这里。 对于我们CUBA Platform的开发人员而言让我们的用户遵循最佳实践非常重要。 我们认为验证代码应为 可重复使用并遵循DRY原则 表达清晰自然 放置在开发人员希望看到的地方 能够检查来自不同数据源的数据用户输入SOAP或REST调用等。 意识到并发性 由应用程序隐式调用而无需手动调用检查 使用简洁的设计对话框向用户显示清晰本地化的消息 遵循标准。 在本文中我将针对所有示例使用基于CUBA平台的应用程序。 但是由于CUBA是基于Spring和EclipseLink的因此大多数示例都可用于支持JPA和bean验证标准的任何其他Java框架。 数据库约束验证 也许最常见和最直接的数据验证方法是使用数据库级别的约束例如必需的标志“非空”字段字符串长度唯一索引等。 这种方式对于企业应用程序来说是很自然的因为这类软件通常以数据为中心。 但是即使在这里开发人员也经常犯错分别为应用程序的每一层定义约束。 此问题通常是由开发人员之间的职责分散引起的。 让我们举一个例子你们大多数人面对甚至参与其中。 如果某个规范说护照字段的数字应该有10位数字那么很可能会在所有地方对其进行检查由DDL中的DB架构师由相应Entity和REST服务中的后端开发人员最后由UI开发人员直接在客户端源中进行检查-码。 后来此要求发生了变化并且字段的大小最多增长了15位。 技术支持更改了数据库约束但是对于用户而言这毫无意义因为无论如何都不会通过客户端检查…… 每个人都知道避免这种问题的方法验证必须集中化 在CUBA中这种验证的中心点是实体上的JPA批注。 基于此元信息CUBA Studio生成正确的DDL脚本并在客户端应用相应的验证器。 如果更改了JPA批注则CUBA将更新DDL脚本并生成迁移脚本因此下次部署项目时基于JPA的新限制将应用于应用程序的UI和数据库。 尽管涉及到DB级别的简单性和实现方式是完全防弹的但是JPA注释受到可以以DDL标准表示的最简单情况的限制而无需涉及特定于DB的触发器或存储过程。 因此基于JPA的约束可以确保实体字段是唯一的或必填的或者可以为varchar列定义最大长度。 另外您可以为带有UniqueConstraint批注的列组合定义唯一约束。 但这差不多。 但是在需要更复杂的验证逻辑的情况下例如检查字段的最大值和最小值使用表达式进行验证或对您的应用程序进行特定的自定义检查我们需要使用众所周知的方法“ Bean验证” 。 Bean验证 我们所知道的遵循标准是一种好习惯标准通常具有较长的生命周期并且在数千个项目中经过了实践证明。 Java Bean验证是一种在JSR 380、349 和303及其实现中固定的方法 Hibernate Validator和Apache BVal 。 尽管许多开发人员都熟悉这种方法但是它的好处常常被低估了。 即使对于旧项目这也是添加数据验证的简便方法它使您能够以清晰直接和可靠的方式表达验证并尽可能接近业务逻辑。 使用Bean验证方法可以为您的项目带来很多好处 验证逻辑集中在您的域模型附近定义值方法bean约束以一种自然的方式完成可以将OOP方法提升到一个新的水平。 Bean Validation标准为您提供了数十种开箱即用的验证批注 例如 NotNull Size Min Max Pattern Email Past次标准例如 URL Length强大的ScriptAssert和很多其他的。 您不受预定义约束的限制可以定义自己的约束注释。 您还可以通过结合其他方式进行新注释或创建全新注释并定义将用作验证程序的Java类。 例如在前面的示例中我们可以定义一个类级别的注释ValidPassportNumber以检查护照号码是否遵循正确的格式该格式取决于国家/地区字段的值。 您不仅可以对字段和类施加约束还可以对方法和方法参数施加约束。 这称为“合同验证”是下一节的主题。 CUBA平台和其他框架一样在用户提交数据时自动调用这些bean验证因此如果验证失败用户将立即收到错误消息而您不必担心手动运行这些bean验证器。 让我们再次看一下护照号码示例但是这次我们要在实体上添加几个附加约束 人名的长度应为2个或更多并且是格式正确的名称。 Regexp非常复杂但是Charles Ogier de Batz de Castelmore Comte dArtagnan通过了支票而R2D2没有通过:); 人的身高应在以下范围内0 身高 300厘米 电子邮件字符串应为格式正确的电子邮件地址。 因此通过所有这些检查Person类如下所示 我认为 NotNull DecimalMin Length Pattern等标准注释的用法非常清楚不需要很多注释。 让我们看看如何实现自定义ValidPassportNumber批注。 我们全新的ValidPassportNumber会检查PersonpassportNumber是否匹配特定于Personcountry定义的每个国家的正则表达式模式。 首先遵循文档 CUBA或Hibernate文档是很好的参考我们需要使用此新注释标记我们的实体类并向其传递groups参数其中UiCrossFieldChecks.class表示应在检查了所有独立字段后调用检查跨字段检查阶段和Default.class将约束保留在默认验证组中。 批注定义如下所示 TargetElementType.TYPE定义此运行时批注的目标为一个类而ConstraintvalidatedBy …声明批注实现在ValidPassportNumberValidator类中该类实现ConstraintValidator …接口并在isValid …方法该代码以非常简单的方式进行实际检查 而已。 使用CUBA平台我们无需编写任何代码即可使我们的自定义验证有效并在用户输入错误时向用户发送消息。 没什么复杂的你同意吗 现在让我们检查一下所有这些东西是如何工作的。 CUBA还有一些额外的好处它不仅向用户显示错误消息而且还用红色线条突出显示尚未通过单字段Bean验证的表单字段 这不是整洁的东西吗 在将几个Java批注添加到域模型实体之后您在用户浏览器中获得了不错的错误UI反馈。 在本节结束时让我们再次简要列出实体的bean验证的优点 清晰易读 它允许在域类中定义值约束 它是可扩展和可定制的 它与许多流行的ORM集成在一起并且在将更改保存到数据库之前会自动调用检查。 当用户在UI中提交数据时某些框架还自动运行Bean验证但如果不是则手动调用Validator接口并不难 Bean验证是众所周知的标准因此Internet上有很多关于它的文档。 但是如果我们需要对方法构造函数或某些REST端点设置约束以验证来自外部系统的数据该怎么办 或者如果我们想以声明性的方式检查方法参数的值而不用在每个方法中编写充满if-els的乏味代码我们需要进行这种检查吗 答案很简单bean验证也可以应用于方法 合同确认 有时我们需要采取进一步的措施而不仅仅是应用程序数据模型状态验证。 许多方法可能会受益于自动参数和返回值验证。 这可能不仅在我们需要检查到达REST或SOAP端点的数据时需要而且在我们要表达方法调用的前提条件和后置条件以确保在执行方法主体之前检查输入数据或返回值时可能需要都在预期范围内或者我们只想声明性地表达参数边界以提高可读性。 通过bean验证可以将约束条件应用于方法或任何Java类型的构造函数的参数和返回值以检查其调用的前提条件和后置条件。 与传统的检查参数和返回值正确性的方法相比此方法具有多个优点 不需要强制性地执行检查例如通过抛出IllegalArgumentException或类似方法。 我们宁愿声明性地指定约束因此我们拥有更具可读性和表达力的代码 约束是可重用可配置和可自定义的我们不需要在每次需要进行检查时都编写验证代码。 更少的代码–更少的错误。 如果用Validated注释标记了类或方法的返回值或方法参数则约束检查将由框架在每次方法调用时自动完成。 如果可执行文件带有Documented批注则其前提条件和后置条件将包含在生成的JavaDoc中。 由于采用了“按合同确认”的方法因此我们获得了清晰的代码数量更少更易于支持和理解。 让我们看一下CUBA应用程序中REST控制器界面的外观。 PersonApiService接口允许使用getPersons方法从数据库中获取人员列表并使用addNewPerson…调用将新人员添加到数据库中。 请记住bean验证是可继承的 换句话说如果用约束为某个类字段或方法添加注释则所有扩展或实现该类或接口的后代都将受到相同的约束检查的影响。 这个代码片段对您来说看起来很清晰并且可读吗 除了RequiredView“ _ local”批注该批注专用于CUBA平台并检查返回的Person对象是否具有从PASSPORTNUMBER_PERSON表中加载的所有字段。 Valid批注指定getPersons方法返回的集合中的每个对象也必须针对Person类约束进行验证。 CUBA在以下端点提供了这些方法 / app / rest / v2 / services / passportnumber_PersonApiService / getPersons / app / rest / v2 / services / passportnumber_PersonApiService / addNewPerson 让我们打开Postman应用程序并确保验证按预期进行 您可能已经注意到上面的示例未验证护照号码。 这是因为它需要对addNewPerson方法进行跨参数验证因为passportNumber验证正则表达式模式取决于国家/地区值。 这样的交叉参数检查直接等效于实体的类级别约束 JSR 349和380支持交叉参数验证您可以查阅hibernate文档以了解如何为类/接口方法实现自定义交叉参数验证器。 超越Bean验证 世界上没有什么是完美的并且bean验证也有一些局限性 有时您只想在将更改保存到数据库之前验证复杂的对象图状态。 例如您可能需要确保来自电子商务系统客户的订单中的所有项目都可以放入您拥有的其中一个运输箱中。 每次用户向他们的订单中添加新项目时这样做都是一项繁重的操作并不是最好的主意。 因此可能需要在Order对象及其OrderItem对象保存到数据库之前仅调用一次此检查。 必须在事务内部进行一些检查。 例如电子商务系统应在将订单提交到数据库之前检查库存是否有足够的商品来履行订单。 这种检查只能在交易内部进行因为系统是并发的并且库存数量可以随时更改。 CUBA平台提供了两种在提交之前验证数据的机制称为实体侦听器和事务侦听器 。 让我们更仔细地看看它们。 实体侦听器 CUBA中的实体侦听 器 与 JPA提供给开发人员的PreInsertEventPreUpdateEvent 和PredDeleteEvent侦听器非常相似。 这两种机制都允许在实体对象持久化到数据库之前或之后检查实体对象。 在CUBA中定义和连接实体侦听器并不难我们需要做两件事 创建一个实现实体侦听器接口之一的托管Bean。 为了进行验证这些接口中的3个很重要 BeforeDeleteEntityListenerBeforeInsertEntityListener和 BeforeUpdateEntityListener 使用Listeners注释对计划跟踪的实体对象进行注释。 而已。 与JPA标准JSR 338第3.5章相比CUBA平台的侦听器接口是有类型的因此您无需强制转换Object参数即可开始使用实体。 CUBA平台增加了与当前实体关联的实体或调用EntityManager加载和更改任何其他实体的可能性。 所有这些更改也会调用适当的实体侦听器调用。 CUBA平台还支持软删除 这是将数据库中的实体标记为已删除而不从数据库中删除其记录时的功能。 因此对于软删除CUBA平台将调用BeforeDeleteEntityListener / AfterDeleteEntityListener侦听器而标准实现将调用PreUpdate / PostUpdate侦听器。 让我们来看一个例子。 事件侦听器bean仅通过以下一行代码连接到Entity类注释Listeners接受实体侦听器类的名称 实体侦听器实现可能如下所示 当您执行以下操作时实体侦听器是不错的选择 需要在实体对象持久化到数据库之前在事务内部进行数据检查 在验证过程中需要检查数据库中的数据例如检查我们是否有足够的货物库存来接受订单 不仅需要遍历给定的实体对象例如Order还需要遍历与该实体关联或组成的对象例如Order实体的OrderItems对象 只想跟踪某些实体类的插入/更新/删除操作例如您只想跟踪Order和OrderItem实体的此类事件而无需在交易期间验证其他实体类中的更改。 交易听众 CUBA事务侦听器也可以在事务上下文中工作但是与实体侦听器相比它们针对每个数据库事务都被调用。 这赋予了他们最终的力量 没有什么可以吸引他们的注意力但同样也会给他们带来弱点 他们很难写 如果执行过多不必要的检查他们会大大降低性能 需要更加谨慎地编写它们事务侦听器中的错误甚至可能阻止应用程序引导。 因此当您需要使用相同的算法检查许多不同类型的实体时例如将数据馈送到服务于所有业务对象的自定义欺诈检测器中事务侦听器是一个很好的解决方案。 让我们看一下检查实体是否使用FraudDetectionFlag注释进行注释的示例如果是请运行欺诈检测器对其进行验证。 再次提醒您此方法在每个数据库事务都在系统中提交之前被调用因此代码必须尝试尽可能快地检查最少的对象。 要成为事务侦听器受管bean应该只实现BeforeCommitTransactionListener接口并实现beforeCommit方法。 启动应用程序时事务监听器会自动连接。 CUBA将所有实现BeforeCommitTransactionListener或AfterCompleteTransactionListener的类注册为事务侦听器。 结论 Bean验证JPA 303、349和980是可以作为企业项目中发生的95数据验证案例的具体基础的一种方法。 这种方法的最大优点是大多数验证逻辑都集中在域模型类中。 因此它易于发现易于阅读和支持。 SpringCUBA和许多库都了解这些标准并会在UI输入经过验证的方法调用或ORM持久性过程中自动调用验证检查因此从开发人员的角度来看验证就像是一种魅力。 一些软件工程师将影响应用程序域模型的验证视为具有一定侵入性和复杂性他们说在UI级别进行数据检查已足够好。 但是我认为在UI控件和控制器中具有多个验证点是很成问题的方法。 另外当我们在这里讨论的验证方法与了解Bean验证器侦听器并将其自动集成到客户端级别的框架集成时不会被认为是侵入性的。 最后让我们制定一个经验法则来选择最佳的验证方法 JPA验证功能有限但是如果可以将此类约束映射到DDL则它是对实体类的最简单约束的理想选择。 Bean验证是一种灵活简洁声明性可重用和可读的方式可以涵盖您可能在域模型类中进行的大多数检查。 在大多数情况下无需在事务内运行验证时这是最佳选择。 合同验证是一个bean验证但用于方法调用。 当您需要检查方法的输入和输出参数时例如在REST调用处理程序中请使用它。 实体侦听器尽管它们不像Bean验证注释那样声明性但是它们是检查大对象图或进行需要在数据库事务内进行检查的好地方。 例如当您需要从数据库读取一些数据来做出决定时。 Hibernate具有此类侦听器的类似物。 事务侦听器是危险的但却是在事务上下文中起作用的最终武器。 当您需要在运行时决定必须验证哪些对象或何时需要根据同一验证算法检查许多不同类型的实体时请使用它。 我希望本文能使您对有关Java企业应用程序中可用的不同验证方法的记忆重新焕发并为您提供一些有关如何改善正在处理的项目的体系结构的想法。 翻译自: https://www.javacodegeeks.com/2018/10/validation-java-applications.htmljava 正在验证应用程序
http://www.pierceye.com/news/75281/

相关文章:

  • 做会计网站的流程图找工程承包app
  • 东营哪里做网站浙江建设信息港官网证书查询
  • 如何做网商商城的网站中国纪检监察报社级别
  • 企业网站的开发建设方案怎么写黑马程序员培训在哪里
  • 阿里巴巴做网站费用计入建设项目 环评申报网站
  • 个人 备案 多个网站上海网络营销的企业
  • 手机网站怎么做的好处重庆seo结算
  • 新河网站中山网站改版
  • 曲阜公司网站建设价格便宜国外网站有哪些平台
  • 高端大气企业网站免费学生html网页制作成品
  • 网站建设企业建站哪家好电子商务网站建设花费
  • 免费货源在线网站手机被网站安装软件有哪些内容
  • M97 网站建设网络公司整站源码取外贸网站域名经验
  • 帮别人做违法网站会判刑吗软件公司网站 手机版
  • 盐地网站建设公司注册网站英语
  • vs2013可以做网站么网站从哪几个方面维护
  • 网站开发申请微信支付全案策划
  • 站长统计幸福宝宝官方wordpress分类目录最简化404
  • 安顺网站建设公司提供网站建设设计
  • 通付盾 公司网站建设百度收录提交入口
  • 网站打不开的原因优质校建设专题网站
  • 哪个网站做长图免费转高清网站设计论文结束语
  • 有个能写文章做任务的网站贵阳能做网站的公司
  • 长沙免费建站模板便利的龙岗网站设计
  • 滨州建设厅网站网站显示内容不显示不出来
  • 移动手机号码网站免费设计房屋的软件
  • 电商网站源码南京本地网站建站
  • 网站页面效果图怎么做的网站大小
  • 唐山企业建网站建设网站服务器 知乎
  • 玉林住房和城乡建设局网站官网竞价网站策划