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. android的多渠道打包

    本文出处:http://www.cnblogs.com/0616--ataozhijia/p/4203997.html 这里以友盟为例子. 项目快上线了,要做一个多渠道打包.不然每次都要在Androi ...

  2. Android Studio项目结构

    我们创建了一个Android Project,打开就如下图所示:  我们选择Project视图,就会有以下的项目文档结构:  上面笔者标注的数字是接下来要讲解的内容. 我们先来看1: 我们创建Appl ...

  3. 给AOP的after函数使用原函数局部变量

    引:AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 这里我们可以理解为在执行某函数时,要先执 ...

  4. C# async await 学习笔记2

    C# async await 学习笔记1(http://www.cnblogs.com/siso/p/3691059.html) 提到了ThreadId是一样的,突然想到在WinForm中,非UI线程 ...

  5. linux httpd 服务的安装

    1.查看是否安装了httpd rpm -qa|grep httpd 2.安装httpd 使用yum 安装 yum -y install httpd 3.关闭防火墙和selinxu 4.使用fz软件或者 ...

  6. 【09_242】Valid Anagram

    Valid Anagram My Submissions Question Total Accepted: 43694 Total Submissions: 111615 Difficulty: Ea ...

  7. 添加ModelGoon插件Eclipse自动生成UML图

    下载ModelGoonjar包 http://download.csdn.net/detail/u011070297/8366021 下载完该jar之后,直接拷贝到Eclipse安装目录下的dropi ...

  8. struts2--表单重复提交

    1.表单重复提交: --使用struts2的Token或TokenSession拦截器避免重复提交: > 上述两个拦截器均不在默认的拦截器栈中,需要在struts.xml中配置: > To ...

  9. PHP类与继承

    <?php class Person { private $name; private $age; function __construct($name,$age){ $this->nam ...

  10. ASP.NET Core 源码阅读笔记(5) ---Microsoft.AspNetCore.Routing路由

    这篇随笔讲讲路由功能,主要内容在项目Microsoft.AspNetCore.Routing中,可以在GitHub上找到,Routing项目地址. 路由功能是大家都很熟悉的功能,使用起来也十分简单,从 ...