使用自定义卫语句写出更简洁的代码
生活随笔
收集整理的這篇文章主要介紹了
使用自定义卫语句写出更简洁的代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
上次,我們介紹了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“
總結
以上是生活随笔為你收集整理的使用自定义卫语句写出更简洁的代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在 C# 中使用 FTP 上传文件
- 下一篇: 浅议NetMQ常见模式和消息加密机制