您现在的位置是:首页 > 文章详情

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

日期:2020-12-09点击:485

更新内容

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

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

我们罗列了与 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

Newbe.ObjectVisitor

原文链接:https://www.oschina.net/news/122911/newbe-objectvisitor-0-4-4-released
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章