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

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

内容简介:更新内容 完全基于表达式树的模型验证器 本版本,我们带来了基于表达式树实现的模型验证器。并实现了很多内置的验证方法。 我们罗列了与 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 发布,模型验证器上线


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

查看所有标签

猜你喜欢:

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

无懈可击的Web设计

无懈可击的Web设计

西德霍姆 / 刘建宁 / 清华大学出版社 / 2009-4 / 59.90元

一个网站,无论视觉上多么美观,内容多么丰富,如果不能面向最广泛的用户群,那它就不算是真正成功的网站。《无懈可击的Web设计:利用XHTML和CSS提高网站的灵活性与适应性》是Web标准设计领域的公认专家Dan Cederholm的倾力之作,向您描述了基于Web标准的设计策略,以适应各种各样的用户浏览方式。书中每一章的开头都给出了一个基于传统HTML技术的实例,然后对它进行重构,指出它的局限性,并利......一起来看看 《无懈可击的Web设计》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具