首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

采用一个自创的验证框架实现对数据实体的验证

昨天晚上突发奇想,弄了一个简易版的验证框架,用于进行数据实体的验证。...本篇文章分上下两篇,上篇介绍如果来使用这个验证框架,《下篇》介绍背后的设计原理和具体实现。 一、定义最简单的验证规则 我们先看看一个最简单的验证规则如何应用到对应的实体类型上。...六、对多验证规则的支持 实体的验证应该是场景驱动的,对于同一中类型的对象,不同的场景决定不同的验证规则。对于“找对象”为例,不同的人具有不同的择偶标准,同一个人在不同的年龄阶段的择偶标准也不可能相同。...所以,一个好的验证框架应该具有定义多中验证规则的能力。 同样以上面的例子来说明,对于Mate类型,我希望为不同的人(比如张三和李四)定义不同的验证规则。...采用一个自创的"验证框架"实现对数据实体的验证[编程篇] 采用一个自创的"验证框架"实现对数据实体的验证[设计篇] 采用一个自创的"验证框架"实现对数据实体的验证[改进篇] 采用一个自创的"验证框架

89970

采用一个自创的验证框架实现对数据实体的验证

为此,我对这个“验证框架”进行了相应的改进,让CompositeValidator具有了解析“验证表达式”的能力。...为了让大家对此改进又一个深刻的认识,我们来对比之下对于同一个验证规则,改进前后有何不同。[源代码从这里下载] 一、改进前如何使用CompositeValidator?...我们为它指定一个验证表达式,它自己可以对表达式进行解析,并调用相应的ValidatorElement实施单一验证。最终将这些单一验证结果按照表达式定义的逻辑关系,得到一个最终的结果。...由于逻辑稍微有点复杂,有兴趣的朋友可以分析一下EnterLib的源码,也可以直接下载本验证框架的源代码分析表达式解析的逻辑。..."验证框架"实现对数据实体的验证[编程篇] 采用一个自创的"验证框架"实现对数据实体的验证[设计篇] 采用一个自创的"验证框架"实现对数据实体的验证[改进篇] 采用一个自创的"验证框架"实现对数据实体的验证

952100
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    采用一个自创的验证框架实现对数据实体的验证

    没有想到自己头脑发热写了一个简陋版本的所谓“验证框架”能够得到众多网友的推荐。...Attribute)的方式应用到相应的数据实体类的属性上,ValidatorAttribute是这些特性的基类; ValidationError:在Validator进行数据验证的时候,如果数据实体对象顺利通过验证...本文提供的所谓的“验证框架”我之所以打上引号,是因为其粗陋不堪,实际上就是我花了不到3个小时写成的一个小程序。不过,对于这个小程序背后的解决问题的思路,我觉得还是可取的。...的方式定义验证消息模板,可以获得多语言文化的支持 其他 采用一个自创的"验证框架"实现对数据实体的验证[编程篇] 采用一个自创的"验证框架"实现对数据实体的验证[设计篇] 采用一个自创的"验证框架..."实现对数据实体的验证[改进篇] 采用一个自创的"验证框架"实现对数据实体的验证[扩展篇]

    2.3K90

    采用一个自创的验证框架实现对数据实体的验证

    关于“验证框架”,先后推出了《编程篇》、《设计篇》和《改进篇》,本不打算再写《XXX篇》的。但是今天收到两个园友的短消息,想了解一下如何定义自己的验证规则。...一、创建一个自定义Validator:StringLengthValidator StringLengthValidator数据实体类型的字符串属性进行校验,确保它的长度符合要求(比如小于或者等于数据库中该列的最大长度...这是一个非常简单的验证逻辑,只需验证大于(或者大于等于)执行的长度下限,小于(或者小于等于)指定的长度上限就可以了。...三、为StringLengthValidator创建ValidatorElementAttribute 在这个“验证框架”中,每一个非CompositeValidator不但可以单独实施验证,还可以作为..."验证框架"实现对数据实体的验证[编程篇] 采用一个自创的"验证框架"实现对数据实体的验证[设计篇] 采用一个自创的"验证框架"实现对数据实体的验证[改进篇] 采用一个自创的"验证框架"实现对数据实体的验证

    81780

    提升PLM实体与关系理解,ERICA一个框架就够了

    机器之心专栏 作者:秦禹嘉 在这篇被 ACL 2021 主会录用的文章中,研究者提出了 ERICA 框架,通过对比学习帮助 PLM 提高实体和实体间关系的理解,并在多个自然语言理解任务上验证了该框架的有效性...实体与实体间关系的表示 鉴于每个实体可能在段落中出现多次,并且每次出现时对应的描述(mention)可能也不一样,作者在使用PLM对tokenize后的段落进行编码后,取每个描述的所有token均匀池化后的结果作为该描述的表示...之后基于对比学习框架,根据远程监督的标签在关系空间中对不同的关系表示进行训练,如前文所述,每个关系表示均由文档中的两个实体表示构成。正样本即具有相同远程监督标签的关系表示,负样本与此相反。...实验结果证明,ERICA对各种实体/关系表示方法均适用,进一步验证了该架构的通用性。 总结 在本文中,作者提出了ERICA框架,通过对比学习帮助PLM提高实体和实体间关系的理解。...作者在多个自然语言理解任务上验证了该框架的有效性,包括关系提取、实体类别区分和问题问答。

    47210

    一个 android 的框架

    最近在 github 上看到一个 android 的框架,结合了 Rxjava + retrofit + dagger2 + mvp,结合了当下比较流行的框架,并且项目层次非常清晰,易于扩展和维护 github...举个例子,退出登录用在这样的情形就很合适,在退出登录后,我们可能不止一个 view 会发生变化,如果把这些写在每一个 Presenter 中无疑是很不简洁的代码 在 modle 层中,抽象出了一个 DataManger...具体分析 dagger2 项目使用了 dagger2 依赖注入框架解耦个层,使得单测和框架替换变得很容易 ApplicationComponent 首先看ApplicationComponent,他有一个...,则查找Inject注解的构造函数,看构造函数是否存在参数 步骤3.1:若存在参数,则从步骤1开始依次初始化每个参数 步骤3.2:若不存在参数,则直接初始化该类实例,一次依赖注入到此结束 因为在使用第三方代码时...,再用 DB 存储,再把结果用Observable的结构返回给 P层,在这个例子中是在一个 service 中调用这个方法 MVP 关于 MVP 这一块,个人的建议是使用谷歌官方的例子。

    84680

    如何加速一个简单的for循环?

    我们直接进入主题,来看一段非常简单的Python的 for 循环代码: for i in range(10000): x[i] = x[i] + 10 看到这代码,肯定有小伙伴会有疑问,这么简单的代码你告诉我竟然可以优化...且听我慢慢分析: 首先我们要意识到,这个循环体循环了10000次。 那么加速的其中一个关键就是减少循环次数,因为每次循环结束之后本质上都是一个分支指令的判断,判断这次循环是否结束。...如果是则跳出循环,进行下一个代码块的执行,否则继续循环。 另外我们还可以充分利用cpu内的寄存器。...程序在执行前,编译器会自动给我们的加法指令分配各个不同的寄存器,避免指令流水线的数据冲突,这样循环内多路并行也降低了时间开销。...饱受Leetcode超时困扰的小伙伴,这样的小trick也许能帮助你们侥幸过关! ? 对这类优化感兴趣的小伙伴,可以参考计算机体系结构相关内容学习。速速上车

    1.4K20

    记一个异步循环遍历的问题

    需求 ---- 跨表循环遍历查询:从第一个表中查询所有匹配的数据,结果为 doc ,数组形式。...从 doc 数组中遍历每一个元素的 phone 属性,去另外一张表中查询 phone 匹配的数据,合并对象,然后返回结果。...OK,又是一个想当然,程序最终会一直在 while 里死循环。 为什么这样不行?...我们都知道 node 是基于异步的事件循环机制,但是当我们这里使用 while 循环判断时,这个 while 本质上是一个同步的代码,其是无法与事件循环机制的钩子对接,所以无法跳出这个同步的 while...promise 嵌套 promise 的情况,我觉得你应该重新思考下 promise ,就这样吧,记录一个很小的问题,至于 async/await 暂时还不想写在这里。

    1.1K20

    家电行业的寒冬中,“卖火柴的小女孩”一个接一个

    在如今全球经济萎靡的之时,许多“街头”涌现出了一个个“卖火柴的小女孩”,甚至在某些行业,企业集体上街“卖火柴”的情况亦是成为了常态。...就像大家电市场,一个个企业纷纷成为“小女孩”,火柴卖不出去,还得考虑“温饱”,如何避免“小女孩”的结局,这应该是他们现在最关心的问题。...一季度家电市场的大幅下跌,其实算是“情理之中,意料之外”。 近几年来整个家电市场本就是就已经处于一个天花板的状态,加上房地产市场收紧,“黑天鹅”飞过,下跌是情理之中。...但说白了,这些举措对于企业渡过寒冬,本质上的意义并不大,更多的只是一个“自我展示和信心激励”,于是就有了一些更加直接的方式。...,毕竟不能输在“起跑点”; 另一方面,大力推广“新风”产品,可以看成是品牌方之间的“默契”,在市场需求饱和的前提下,需要这么一个能激起市场更新换代的“点”,“健康”需求正好重新定义空调产品的价值与定位。

    41810

    .Net 从零开始构建一个框架之基本实体结构与基本仓储构建

    本系列文章将介绍如何在.Net框架下,从零开始搭建一个完成CRUD的Framework,该Framework将具备以下功能,基本实体结构(基于DDD)、基本仓储结构、模块加载系统、工作单元、事件总线(EventBus...,持久化对象和非持久化对象.本文主要讨论的是持久化对象,即需要写入到数据库或者其他数据容器中的对象,也就是实体(当然这里不是所谓的实体,而是通过OOP技术构建出来的一个实体结构,这个结构需要满足日常开发中绝大多数的业务需求...abstract来实现,也是为了提供各自实体的共有抽象属性(或者方法).到这一步,最最基本的实体抽象构建完毕,但是还没有结束,因为这个结构可以继续优化.使它可以为我们的业务更好的服务.所以需要持久化的实体必定存在一个创建的过程...,可能该实体在某些业务下不需要修改、删除或者查询功能,但是它有极大的概率存在一个创建的过程,所以这里需要构建一个实体创建的抽象类,代码如下: public interface ICreationAudited...最后实体创建的结构,构建完毕之后,在编写一个需要增删查改所有功能都具备的实体结构,整个实体结构大致就构建完毕了,代码如下: public interface IDeletionAudited

    76430

    Go 中循环使用 defer 的一个 bug

    首先说明在循环中使用 defer 是一个不好的习惯 在逛社区的时候碰到了这个问题 package main import "fmt" type Test struct { name string..., 这样子使用defer会声明一个外部变量, 循环中不断赋值, 导致用了最后一个, 但我看了一下代码, 感觉不对....但有一个例外,如果某个值是可寻址的(addressable,或者说左值),那么编译器会在值调用指针方法时自动插入取地址符,使得在此情形下看起来像指针方法也可以通过值来调用 当你通过一个值去调用指针方法,...那么会去寻址, 而你在循环中调用 第一次: 那么这个变量开始地址是: 0xc000044240, 这时候指针调用的方法Close也是记住了这个地址, 指针指向结构体的值是a, 第一次循环结束释放局部变量...第二次: 那么这个变量地址还是: 0xc000044240, 这时候指针调用的方法Close也是记住了这个地址, 指针指向结构体的值是b, 第二次循环结束释放局部变量 第三次: 那么这个变量地址还是:

    18610

    谈谈一个框架的扩展加载

    API,它可以用来启用框架扩展和替换组件,可以根据使用者的配置,来加载接口的具体实现类。...如果扩展点加载失败,连扩展点的名称都拿不到了(不会上报真正失败的原因)。 增加了对扩展点 IoC 和 AOP 的支持,一个扩展点可以直接 setter 注入其它扩展点。...扩展点自适应: ExtensionLoader 注入的依赖扩展点是一个 Adaptive 实例,直到扩展点方法执行时才决定调用是哪一个扩展点实现。...wrapperClasses.isEmpty()) { // 循环创建 Wrapper 实例 for (Class的代码有些复杂,主要的流程是通过@Adaptive注解标注在类或方法上,如果是标注在类上就会生成代理类(这种模式比较简单),如果标注在方法上,就会由框架自动生成加载扩展的逻辑。

    51820

    谈谈一个框架的扩展加载

    API,它可以用来启用框架扩展和替换组件,可以根据使用者的配置,来加载接口的具体实现类。...如果扩展点加载失败,连扩展点的名称都拿不到了(不会上报真正失败的原因)。 增加了对扩展点 IoC 和 AOP 的支持,一个扩展点可以直接 setter 注入其它扩展点。...扩展点自适应: ExtensionLoader 注入的依赖扩展点是一个 Adaptive 实例,直到扩展点方法执行时才决定调用是哪一个扩展点实现。...wrapperClasses.isEmpty()) { // 循环创建 Wrapper 实例 for (Class的代码有些复杂,主要的流程是通过@Adaptive注解标注在类或方法上,如果是标注在类上就会生成代理类(这种模式比较简单),如果标注在方法上,就会由框架自动生成加载扩展的逻辑。

    42810

    一个测试API的pytest框架

    现在,我们将创建一个小的pytest框架来测试API。这里使用的API是https://reqres.in/的免费API 。该网站仅提供可测试的API。该网站不存储我们的数据。...在这里,我们将为 列出一些用户 与用户登录 使用给定的代码创建以下文件 conftest.py-有一个fixture,可以为所有测试方法提供基本网址 导入pytest @ pytest.fixture...def supply_url(): 返回“ https://reqres.in/api” test_list_user.py –包含列出有效和无效用户的测试方法 test_list_valid_user...测试有效的用户访存并验证响应 test_list_invaliduser测试无效的用户访存并验证响应 import pytest import requests import json @pytest.mark.parametrize...test_login_valid使用电子邮件和密码测试有效的登录尝试 test_login_no_password在不通过密码的情况下测试无效的登录尝试 test_login_no_email测试无效的登录尝试

    1.4K31

    手写一个简单的mybatis框架

    前言: mysql作为优秀的开源框架之一,作为一个高级java程序员不仅仅学会使用它,更应该学习它的源码、设计、思想。...经过前面对mybatis的流程的学习,今天分享一下如何自己实现一个简单的mybatis框架。...当然由于技术和时间的限制,本文在这里实现的一个简化版本的mybatis,相对来说只是mybatis本身框架的冰山一角,但是整体的流程以及设计的思想都是和mybatis一样的,个人觉得对我们理解和学习mybatis...(ResultSet)进行封装,返回用户指定的实体类型,源码中也同样是远比这复杂,包括解析resultMap,分页、甚至存储过程返回的多结果集处理等等,本文就是对默认返回的是resultType,然后通过反射的技术对该...谢谢,本文的源码经过测试是能运行成功,需要自己简单创建一个数据库表,另外配置文件可能要稍微修改一点点。

    39010
    领券