写该系列缘由是因为之前在国庆无聊实现了一个对象验证的小库,
并希望博客园内的大神能批评教育一下我的这个库,让我能成长一些。
但是估计由于我没有介绍库的内容以及我的思路,只是给出了代码,
大神们对此没太大的兴趣,
所以最近开始我会写一个几篇简单介绍性文章的系列来阐述该库的内容。
希望有幸能被大神们看见并给予我一些批评。
0) 目录以及库结构介绍
1) 接口介绍以及总体思路概述
2) 验证器实现
3) Fluent以及扩展方法实现
本人是设想库的使用者可以用 Fluent 的方式创建对象的验证规则,
并且库由于不太涉及.net不同设备平台的特有代码,所以我是使用Portable 方式编写该库。
设想的库使用方式代码如下:
Container.Init(); // Only need init in your app once,目的是绑定类型与接口var builder = Validation.NewValidatorBuilder<Student>(); // 创建验证创建者b.RuleFor(i => i.Age) .Must(i => i >= 0 && i <= 18) .OverrideName("student age") .OverrideError("not student") .ThenRuleFor(i => i.Name) .Must(i => !string.IsNullOrWhiteSpace(i)) .OverrideName("student name") .OverrideError("no name");// 设置验证规则 var v = builder.Build(); // 利用创建者创建验证器var student = new Student() { Age = 13, Name = "v" }; // 验证对象数据var context = Validation.CreateContext(student); // 创建验证上下文,因为上下文中有执行相关的参数var result = v.Validate(context); // 使用验证器验证student数据Assert.IsNotNull(result);Assert.True(result.IsValid);Assert.True(result.Failures.Count == 0); // 验证结果的对比测试
项目结构如下图:
UnitTest :单元测试代码 (这个不用介绍了吧)
ObjectValidater :库只有这一个项目
目前该库只有一个依赖 Autofac,由于解耦接口和具体实现:
<package id="Autofac" version="3.5.2" targetFramework="portable-net40+sl50+win80+wp80+wpa81" />
NEXT: 1) 接口介绍以及总体思路概述
新闻热点
疑难解答