SUMMARY

  • 用途
  • DEMO演示
  • NuGet相关的资料
  • VS工具端的设置

用途

数据验证的作用很重要,目前.NET提供的内建验证机制是采用DataAnnotation方式来实现属性的验证,并且也提供了很多验证Attribute,如下图:

不过缺点也有:

  • 没有基于场景的验证支持

    • 如订单Entity

      • 如果是PC录入,则要求验证完整的属性有效性
      • 如果是Mobile录入,则要求验证一部分属性有效性
      • 如果是后台admin录入,则要求最小属性有效性
  • 硬编码导致不灵活
    • 生产环境中的维护成本,重新编译、测试、上线
    • 管理人员无法修改规则,只能通过开发部门

基于上述2点,做了些改进,填补上述缺点

DEMO演示

先建立工程,然后用NuGet工具引用A2DFramework.BusinessExceptionService:

public class OrderEntity
{
[Required]
[RuleMobileAttribute("PC录入")] //这个是A2DFramework提供的验证属性,构造函数中标明场景名
public string FirstName { get; set; } public string LastName { get; set; } public string Mobile { get; set; }
}
class Program
{
static void Main(string[] args)
{
A2DFramework.Starter.Init();
A2DFramework.RuleEngine.Starter.Init();
A2DFramework.BusinessExceptionService.Starter.Init(); OrderEntity user = new OrderEntity();
user.FirstName = "";
Console.WriteLine("=========无场景验证,既执行基本验证==========");
foreach (var error in user.IsValid ())//基本验证用法,不会验证场景
{
string msg = string.Format("key: {0}, msg: {1}", error.Key, error.Message);
Console.WriteLine(msg);
}
Console.WriteLine("==========有场景验证 [PC录入]=========");
foreach (var error in user.IsValid("PC录入") )//场景验证方式,参数中传入场景名
{
string msg = string.Format("key: {0}, msg: {1}", error.Key, error.Message);
Console.WriteLine(msg);
} Console.ReadKey();
}
}

场景部分验证规则可硬编码在C#代码中,也可以extract到xml中:

A2D.config:
<?xml version="1.0" encoding="utf-8" ?>
<A2D>
<BusinessExceptionService configSource ="A2D.BusinessExceptionService.config">
</BusinessExceptionService>
</A2D> A2D.BusinessExceptionService.config:
<?xml version="1.0" encoding="utf-8" ?>
<A2D>
<BusinessExceptionService>
<Scene Name="场景1">
<EntityType Type="ConsoleApplication12.OrderEntity, ConsoleApplication12">
<Rule RuleType="PropertyValidator " FailAction="Warning" PropertyName="LastName" ErrorMessage="LastName值不能大于10">
<![CDATA[
value!=null&&value.length<=10
]]></Rule>
<Rule RuleType="ClassValidator" FailAction="Warning" ErrorMessage="FirstName与LastName不相符">
<![CDATA[
value!=null
&&value.FirstName!=null
&&value.LastName!=null
&&value.FirstName===value.FirstName
]]>
</Rule>
</EntityType>
</Scene>
</BusinessExceptionService>
</A2D>

RuleType允许的值有两种:PropertyValidator和ClassValidator。分别代表验证属性、验证整个Entity。

Rule内容采用javascript写法,如果当前RuleType为PropertyValidator,则value代表当前属性值

如果当前RuleType为ClassValidator,则value代表当前Entity

执行结果:

NuGet相关的资料

NuGet学习笔记(1)——初识NuGet及快速安装使用

http://kb.cnblogs.com/page/143190/

NuGet学习笔记(2)——使用图形化界面打包自己的类库

http://kb.cnblogs.com/page/143191/

NuGet学习笔记(3)——搭建属于自己的NuGet服务器

http://kb.cnblogs.com/page/143192/

VS工具端的设置

可扩展验证框架 - A2DFramework验证框架使用介绍的更多相关文章

  1. thinkphp框架验证码验证一次

    做异步验证验证码,只要验证一次结果正确,拿相同的值再次来对比,返回结果就不正确.我看到论坛中有人说,tp框架只要验证过一次正确后验证码就销毁了.确实是这个效果,但具体的还没深入了解

  2. Struts2验证框架_xml验证失败

    测试Struts2验证框架-->XML验证   启动tomcat后网页登录失败 Employee-validation.xml文件头如下: <!DOCTYPE validators PUB ...

  3. struts2框架xml验证

    struts2验证分为3步: 1.获取需要验证的信息,使用同名属性,提供getter,setter方法.然后框架使用反射将值自动注入. 2.对信息进行验证,成功失败作出对应的选择. xml验证和手动验 ...

  4. 自己定义验证器——用Struts2框架以框架师的思维灵活做好该事情

    面对的问题:自己定义一个18位身份验证器.编写验证器.在validators.xml文件里进行注冊.在验证配置文件里使用? 第一部分:理解Struts2中自带的验证器 第二部分:如何通过server( ...

  5. 如何创建一个验证请求的API框架

    ​开发一款成功软件的关键是良好的架构设计.优秀的设计不仅允许开发人员轻松地编写新功能,而且还能丝滑的适应各种变化. 好的设计应该关注应用程序的核心,即领域. 不幸的是,这很容易将领域与不属于这一层的职 ...

  6. Govern EventBus - 历经多年生产环境验证的事件驱动架构框架

    Govern EventBus Govern EventBus 是一个历经四年生产环境验证的事件驱动架构框架, 通过事件总线机制来治理微服务间的远程过程调用. 使用本地事务来支持微服务内强一致性,事件 ...

  7. 可扩展多线程异步Socket服务器框架EMTASS 2.0 (转自:http://blog.csdn.net/hulihui)

    可扩展多线程异步Socket服务器框架EMTASS 2.0 (转自:http://blog.csdn.net/hulihui) 0 前言 >>[前言].[第1节].[第2节].[第3节]. ...

  8. 写一个简单易用可扩展vue表单验证插件(vue-validate-easy)

    写一个vue表单验证插件(vue-validate-easy) 需求 目标:简单易用可扩展 如何简单 开发者要做的 写了一个表单,指定一个name,指定其验证规则. 调用提交表单方法,可以获取验证成功 ...

  9. 分布式定时任务框架——python定时任务框架APScheduler扩展

    http://bbs.7boo.org/forum.php?mod=viewthread&tid=14546 如果将定时任务部署在一台服务器上,那么这个定时任务就是整个系统的单点,这台服务器出 ...

随机推荐

  1. java环境配置总结

    最近接触java,在环境配置上费了不少劲.总结一下: 1.首先安装jdk和Eclipse,jdk我安装的是1.6,Eclipse可以从官网下载:http://download.eclipse.org/ ...

  2. Mysql --分区表(7)Key分区

    Key分区 按照Key进行分区非常类似于按照Hash进行分区,只不过Hash分区允许使用用户自定义的表达式,而Key分区不允许使用用户自定义的表达式,需要使用MySQL服务器提供的HASH函数;同时H ...

  3. C#设计模式总结

    一.引言 经过这段时间对设计模式的学习,自己的感触还是很多的,因为我现在在写代码的时候,经常会想想这里能不能用什么设计模式来进行重构.所以,学完设计模式之后,感觉它会慢慢地影响到你写代码的思维方式.这 ...

  4. ASP.NET MVC请求处理管道生命周期的19个关键环节(7-12)

    在上一篇"ASP.NET MVC请求处理管道生命周期的19个关键环节(1-6) ",体验了1-6关键环节,本篇继续. ⑦根据IsapiWorkerRequest对象,HttpRun ...

  5. 选择哪种方式进行SharePoint的备份

    关于SharePoint的备份还原功能,大家可能都有所了解.但是SharePoint一共有多少种备份方式呢,哪种备份方式是更适合你的呢,本文主要为大家梳理,并且深入的研究一下常见的几种备份方式,以便大 ...

  6. 如何试用Office 365 及 SharePoint Online(美版)

    Office 365已经在国外运营一段时间了,本文主要帮助大家注册一个试用账户.废话少说按步骤来: 进入注册页面,链接地址 . 1. 对于不同的企业,提供了不同的套餐,这里我们试用这个中等企业的套餐, ...

  7. Express 4 更新改变文档

    概览 从 Express 3 到Express 4 是一个巨大的变化,这意味着现存的 Express 3 应用在不更新依赖的情况下将不能工作. 这篇文章涵盖一下内容: Express 4 中的变化 一 ...

  8. LEA指令

    格    式:LEA OPRD1,OPRD2 功    能:将有效地址传送到指定的的寄存器 OPRD1 为目的操作数,可为任意一个16位的通用寄存器. OPRD2 为源操作数,可为变量名.标号或地址表 ...

  9. linux(CentOS)-nodejs项目部署

    系统:CentOS 64位(查看系统位数请执行命令:getconf LONG_BIT) 1.到http://nodejs.org/download/找到系统对应的安装文件 执行如下命令: wget h ...

  10. duilib进阶教程 -- 改进窗口拖动 (12)

    现在大家应该都知道caption="0,0,0,32",是指示标题栏区了吧,如果想要整个窗口都能拖动呢? 那直接把高度改成和窗口一样不就得了~O(∩_∩)O~ 嗯,这样是可以,比如 ...