实现一个对象验证库系列 (请大神批评) -- 0) 目录以及库结构介绍
缘由
写该系列缘由是因为之前在国庆无聊实现了一个对象验证的小库,
并希望博客园内的大神能批评教育一下我的这个库,让我能成长一些。
但是估计由于我没有介绍库的内容以及我的思路,只是给出了代码,
大神们对此没太大的兴趣,
所以最近开始我会写一个几篇简单介绍性文章的系列来阐述该库的内容。
希望有幸能被大神们看见并给予我一些批评。
系列目录
本片正文 :库结构介绍
(0)库介绍
本人是设想库的使用者可以用 Fluent 的方式创建对象的验证规则,
并且库由于不太涉及.net不同设备平台的特有代码,所以我是使用Portable 方式编写该库。
设想的库使用方式代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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); // 验证结果的对比测试 |
(1)库代码结构介绍
项目结构如下图:
UnitTest :单元测试代码 (这个不用介绍了吧)
ObjectValidater :库只有这一个项目
- Base : 验证规则,规则创建者,规则选择器,验证器等实际实现代码
- Checkers :各种验证方式的具体实现
- Common :与库业务定义或者逻辑无关,提供便利地公用扩展方法或者类的实现
- Entities :验证上下文,验证结果定义
- Interfaces :各种接口的定义
- Container 类:用于接口与实现类型绑定的解耦设置静态类
- Syntax 类:提供Fluent使用方式的扩展方法定义
- Validation 类:因为想将接口与实际实现解耦,所以不便于让用户自行 new 对象,只能提供创建的静态类
(2)项目依赖
目前该库只有一个依赖 Autofac,由于解耦接口和具体实现:
1 | < package id="Autofac" version="3.5.2" targetFramework="portable-net40+sl50+win80+wp80+wpa81" /> |
NEXT: 1) 接口介绍以及总体思路概述
分类:
c#
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂