C# 工具包 Newbe.ObjectVisitor 0.4.4 发布,模型验证器上线

栏目: 软件资讯 · 发布时间: 4年前

内容简介:更新内容 完全基于表达式树的模型验证器 本版本,我们带来了基于表达式树实现的模型验证器。并实现了很多内置的验证方法。 我们罗列了与 FluentValidation 比较的情况: Build in Validators FluentValidation 9...

更新内容

完全基于表达式树的模型验证器

本版本,我们带来了基于表达式树实现的模型验证器。并实现了很多内置的验证方法。

我们罗列了与 FluentValidation 比较的情况:

Build in Validators FluentValidation 9.X Newbe.ObjectVistor
NotNull ✔️ ✔️ NotNull; class
NotEmpty ✔️ ✔️ NotEmpty; string,enumerable
NotEqual ✔️ ✔️ NotEqual; all
Equal ✔️ ✔️ Equal; all
Length ✔️ ✔️ Length; string,enumerable
MaxLength ✔️ ✔️ MaxLength; string,enumerable
MinLength ✔️ ✔️ MinLength; string,enumerable
Less Than ✔️ ✔️ LessThan; number
Less Than Or Equal ✔️ ✔️ LessThanOrEqual; number
Greater Than ✔️ ✔️ GreaterThan; number
Greater Than Or Equal ✔️ ✔️ GreaterThanOrEqual; number
Predicate ✔️ ✔️ Validate; all
Regular Expression ✔️ ✔️ MatchRegex,NotMatchRegex; string
Email ✔️ ???? MatchRegex; string
Credit Card ✔️ ???? MatchRegex; string
Enum ✔️ ✔️ IsInEnum; number,string,enum
Enum Name ✔️ ✔️ IsEnumName; string
Empty ✔️ ✔️ Empty; string,enumerable
Null ✔️ ✔️ Null; class
ExclusiveBetween ✔️ ✔️ IsInRange; number,enum
InclusiveBetween ✔️ ✔️ IsInRange; number,enum
ScalePrecision ✔️ ✔️ ScalePrecision; number
Or ✔️ Or; all
IsInSet ✔️ IsInSet; all
IsNotInSet ✔️ IsNotInSet; all
CanParse ???? CanParse; all

FluentAPI 生成器重构的代码

我们基于 0.3 已经发布的 FluentAPI 进行了核心代码重构,现在一些特定场景下需要您指定的泛型参数更少了,但是功能没有减少,更有利您进行开发。

类似的,例如下面这个变更:

  // create a data visitor to cover sensitive data
  _visitor = default(UserModel).V()
-     .ForEach<UserModel, string>(x => CoverSensitiveData(x))
+     .ForEach<string>(x => CoverSensitiveData(x))
      .Cache();

同时支持英文与简体中文方法注释

在热心网友 EventHorizon1024 的帮助下,我们在保留英文作为原始注释的情况下,对使用简体中文 IDE 的开发者们提供了全简中的方法说明。

开发者无需特殊操作,便可以在 IDE 中直接查看到简体中文的方法注释。

如何实现的详细操作方法,开发者也可以通过以下链接借鉴使用:

https://github.com/dotnet/roslyn/issues/3371#issuecomment-737623706

开发文章站点正式上线

我们非常顺利的上线了开发文档站点:

后续所有关于本 工具 包相关的文章除了在博客 https://www.newbe.pro 及相关博客公布之外,我们将会更新以上站点,丰富其中的文档。

目前,我们已经上线了几篇简单的文档:

项目说明

Newbe.ObjectVisitor 帮助开发者可以用最简单的最高效的方式访问一个普通 class 的所有属性。从而实现:验证、映射、收集等等操作。

例如, 在你的代码中有这样一个简单的类。

var order = new OrderInfo();

你想要将这个类所有的属性和值都打印出来,那么你可以采用反射来完成:

for(var pInfo in typeof(OrderInfo).GetProperties())
{
    Console.Writeline($"{pInfo.Name}: {pInfo.GetValue(order)}");
}

如果你使用这个类库,则可以采用以下方式来实现一样的效果:

// call .V what is a static extension method
// you get a visitor object for order
var visitor = order.V();

visitor.ForEach(context=>{
    var name = context.Name;
    var value = context.Value;
    Console.Writeline($"{name}: {value}");
}).Run();

// you can also make it into one line
order.V().ForEach(c=> Console.Writeline($"{c.Name}: {c.Value}")).Run();

// or using quick style
order.FormatToString();

那我为什么要这样做?

  • 因为这样更快!这个类库使用表达式树实现,因此它拥有比直接使用反射快上10倍的性能.
  • 因为这样更可读!通过这个类库你可以使用链式API和命名方法来创建一个委托,这样可以让你的代码实现和硬编码同样的可读效果。
  • 因为这样更具扩展性!如果使用了这个类库,你就拥有了一个简便的方法来访问一个类所有的属性。因此,你就做很多你想做的事情,比如:创建一个验证器来验证你的模型,修改一些可能包含敏感数据的属性从而避免输出到日志中,创建一个类似于AutoMapper的对象映射器但是拥有更好的性能,诸如此类。

GitHub 项目地址:https://github.com/newbe36524/Newbe.ObjectVisitor

Gitee 项目地址:https://gitee.com/yks/Newbe.ObjectVisitor

C# 工具包 Newbe.ObjectVisitor 0.4.4 发布,模型验证器上线


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Programming Ruby中文版

Programming Ruby中文版

托马斯 / 孙勇、姚延栋、张海峰 / 电子工业出版社 / 2007-3 / 99.00元

《Programming Rudy》(中文版)(第2版)是它的第2版,其中包括超过200页的新内容,以及对原有内容的修订,涵盖了Ruby 1.8中新的和改进的特性以及标准库模块。它不仅是您学习Ruby语言及其丰富特性的一本优秀教程,也可以作为日常编程时类和模块的参考手册。Ruby是一种跨平台、面向对象的动态类型编程语言。Ruby体现了表达的一致性和简单性,它不仅是一门编程语言,更是表达想法的一种简......一起来看看 《Programming Ruby中文版》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

SHA 加密
SHA 加密

SHA 加密工具