使用自定义卫语句写出更简洁的代码

前言

上次,我们介绍了Pitcher,可以帮我们简化卫语句:

public User(string name, int age)
{Throw.When(string.IsNullOrWhiteSpace(name), new ArgumentNullException(nameof(name)));Throw.When(age <= 0, new ArgumentOutOfRangeException(nameof(age)));//正常业务逻辑this.Name = name; this.Age = age; 
}

但是,这样的代码还是不够简洁,因为我们更关注正常业务逻辑。

Ardalis.GuardClauses

今天,我们介绍另一个Nuget包Ardalis.GuardClauses来实现卫语句。

Ardalis.GuardClauses提供了Guard.Against对象,基本API如下:

  • Guard.Against.Null 判断是否为null

  • Guard.Against.NullOrEmpty 判断是否为null或空

  • Guard.Against.NullOrWhiteSpace 判断是否为null或空或空格

  • Guard.Against.OutOfRange 判断是否超出范围

相对于Pitcher,它的优势在于,每个卫语句都有返回值,前面的代码可以改成这样:

public User(string name, int age)
{this.Name = Guard.Against.NullOrWhiteSpace(name, nameof(name));this.Age = Guard.Against.OutOfRange(age, nameof(age), 1, 100);
}

自定义卫语句

除此之外,对于特殊条件的卫语句,我们可以使用Guard.Against对象编写扩展方法,让语义更清晰:

namespace Ardalis.GuardClauses
{public static class UserGuard{public static int InvalidAge(this IGuardClause guardClause, int age){var validAges = new[] { 1, 3, 5 };if (!validAges.Contains(age))throw new Exception("年龄不符");return age;}}
}public User(string name, int age)
{this.Name = Guard.Against.NullOrWhiteSpace(name, nameof(name));this.Age = Guard.Against.InvalidAge(age);
}

结论

使用Ardalis.GuardClauses,可以让卫语句更简洁易读。

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Struts2的ResultType和Action处理链

Struts2的ResultType和Action处理链Struts2的结果类型在struts-default.xml中定义了Struts2内置的所有可用的<result-type/> 所有的Struts2结果处理类都要直接或间接的实现com.opensymphony.xwork2.Result接口 在struts-default.xml中的<result-types/>里面&#x…

git fork

http://help.github.com/fork-a-repo/ 概要&#xff1a; 克隆别人的代码库到自己的项目中&#xff0c;可以作为子模块的形式使用&#xff0c;或二次开发 操作流程&#xff1a; 在开源项目中点击fork按钮&#xff0c;稍等一会儿&#xff0c;该项目便会拷贝一份到你的respositori…

转软件开发过程中的各种文档

在项目开发过程中&#xff0c;应该按要求编写好十三种文档&#xff0c;文档编制要求具有  针对性、精确性、清晰性、完整性、灵活性、可追溯性。   ◇ 可行性分析报告&#xff1a;     说明该软件开发项目的实现在技术上、经济上和社会因素上的可行性&#xff0c;评述 …

【ACR2015】依那西普按需维持治疗策略有效抑制RA骨破坏进展

标签: 类风湿关节炎; 依那西普; 药物减停; 复发重治 对RA疾病复发患者, 依那西普按需治疗与持续足剂量治疗是否存在疗效差异&#xff1f; Inui K, et al. ACR 2015. Presentation ID: 477. 背景/目的: 生物DMARDs&#xff08;bDMARDs&#xff09;对RA治疗而言非常重要, 尤其对…

堪称经典!这部由苏联最杰出数学家编写的数学教材,为何能大受推崇?

全世界只有3.14 % 的人关注了爆炸吧知识安德列柯尔莫哥洛夫&#xff0c;20世纪苏联最杰出的数学家&#xff0c;也是20世纪世界上为数极少的几个最有影响的数学家之一。1924年他念大学四年级时就和当时的苏联数学家辛钦一起建立了关于独立随机变量的三级数定理。1928年他得到了随…

浅议NetMQ常见模式和消息加密机制

题图来自https://www.pexels.com/概述在传统企业级开发中&#xff0c;消息队列机制已经成为一种非常常见的技术实现手段&#xff0c;而基于NetMQ则看起来有点像一朵“奇葩”&#xff0c;看起来从名字似乎是一个消息队列&#xff08;Message Quene&#xff09;&#xff0c;但事实…

linux python matplotlib 使用,python绘图工具matplotlib在linux下安装和使用

工具介绍&#xff1a;matplotlib 是Python编程语言的一个绘图库及其数值数学扩展 NumPy。它为利用通用的图形用户界面工具包&#xff0c;如Tkinter, wxPython, Qt或GTK向应用程序嵌入式绘图提供了面向对象的应用程序接口(API)。还有一个基于状态机(如开放图形库OpenGL)的程序py…

Struts2的Interceptor和Listener以及Plugin

Struts2的Interceptor和Listener以及PluginStruts2的拦截器在struts-default.xml中定义了很多拦截器&#xff0c;这些拦截器就是用来完成许多强劲功能的保证 而且可以根据已定义的若干拦截器中的某几个拦截器构建成interceptor-stack拦截器栈 其实拦截器栈还可以由拦截器栈组成…

with(nolock)简解

eg&#xff1a;select top 200 from 表A with(nolock) where 条件 为了性能&#xff0c;查询时不锁定表&#xff0c;从而达到提高查询速度的目的。 &#xff08;转&#xff09;SQL中with(nolock)详解 大家在写查询时,为了性能,往往会在表后面加一个nolock,或者是with(nolock),其…

CentOS 5.5下搭建部署独立SVN服务器全程详解

SVN服务器有2种运行方式&#xff1a; 1、独立服务器 (例如&#xff1a;svn://xxx.com/xxx)&#xff1b; 2、借助apache (例如&#xff1a;http://svn.xxx.com/xxx)&#xff1b; 为了不依赖apache&#xff0c;我选择第一种方式&#xff1a;独立的svn服务器。SVN存储版本数据也…

35岁成MIT终身教授!北大数学“黄金一代”再获大奖

全世界只有3.14 % 的人关注了爆炸吧知识18岁时满分斩获国际奥林匹克数学竞赛金牌&#xff0c;本科就读北大数院期间19门课程成绩100分、7门99分&#xff0c;35岁成为麻省理工&#xff08;MIT&#xff09;终身教授……近日&#xff0c;数学“大神”恽之玮再获国际大奖——西蒙斯…

二维数组foreach嵌套遍历,判断连续3天以上的算有效数据

2019独角兽企业重金招聘Python工程师标准>>> $studycourseinfo $studycourseinfoModel->where($where)->limit($page->firstRow.,.$page->listRows)->order(create_time asc)->select(); //$studycourseinfos $studycourseinfoModel->where(…

linux mint 用户管理,Linux Mint 新工具:将网站转变为独立的应用

Linux Mint 目前正在积极推进 20.1 版本&#xff0c;日前官方博客介绍了新版本将会带来的一项有意思的新特性&#xff1a;WebApp 管理器。简单来讲&#xff0c;这一特性可以把网站转变成独立的应用&#xff0c;这与基于 Debian 和 Ubuntu 的发行版 Peppermint OS 名为 ICE 的功…

如何评价一个开源项目——协作影响力

本文由X-lab开放实验室博士生赵生宇创作 该篇博客紧跟上一篇关于活跃度的介绍这篇文章系统介绍了一种基于全域开发者协作网络的项目影响力评估方法&#xff0c;该方法对于分析整个开源生态有极大的帮助。在一次性评估出所有项目的协作影响力的同时&#xff0c;也可以对项目的协…

Struts2中的OGNL表达式

基础知识&#xff08;三&#xff09;Struts2中的OGNL表达式浅析值栈ValueStack对象相当于一个栈&#xff0c;它贯穿整个Action的生命周期&#xff0c;每个Action类的对象实例都会拥有一个ValueStack对象 当Struts2接收到一个*.action请求后&#xff0c;并不是直接调用Action方法…

Qt学习资料

QT 相关资源&#xff08;书籍、论坛、博客等。。。&#xff09;整理... 中文名&#xff1a;《提问的智慧》英文名&#xff1a;How To Ask Questions The Smart Way中文链接1&#xff1a;http://www.beiww.com/doc/oss/smart-questions.html中文链接2&#xff1a;http://communi…

UITableView 界面小实例

最近一是很忙&#xff0c;没时间写东西&#xff0c;今天抽时间来总结一下这几天学到的东西 首先看看&#xff0c;程序现在的样子&#xff1a; 基本完成这些&#xff0c;还有一个webview就不截图了 记录一下要点&#xff0c;首先自定义tableview&#xff0c;这个是按照iphone3开…

linux下简单的备份的脚本 2 【转】

转自&#xff1a;http://blog.chinaunix.net/xmlrpc.php?rblog/article&uid26807463&id4577034 之前写过 linux下简单的备份的脚本 &#xff0c; 最开始一直用着&#xff0c; 后来觉得有必要改进下它了&#xff0c; 不管是从操作方式上还是工作方式上。有这样的想法是…

linux 文档属于apache,Apache 安装和使用文档

Apache 安装和使用文档更新时间&#xff1a;2009年11月26日 00:34:37 作者&#xff1a;Apache安装和使用文档一、准备工作&#xff1a;1台PC机&#xff0c;安装linux操作系统 参考文档linux安装.docx2 gcc的安装 参考文档gcc的安装.zip3 apache的安装包httpd-2.0.63.tar.gz二…

在数学世界,都有这些美妙的数学公式......

全世界只有3.14 % 的人关注了爆炸吧知识什么是数学&#xff1f;华罗庚说&#xff1a;宇宙之大&#xff0c;粒子之微&#xff0c;火箭之速&#xff0c;化工之巧&#xff0c;地球之变&#xff0c;生物之谜&#xff0c;日用之繁&#xff0c;无处不用数学......回首往昔&#xff0c…