编写前置和后置条件的连贯接口库:CuttingEdge.Conditions
时间:2022-04-23
本文章向大家介绍编写前置和后置条件的连贯接口库:CuttingEdge.Conditions,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
当调用一个方法时,在其执行之前期望其处于特定状态; 也需要完成一些工作之后验证结果的状态。 这些假设被称为前置条件(pre-conditions )和 后置条件(post-conditions)。开源项目CuttingEdge.Conditions 是一个提供一个 fluent 接口用于指定预生成和 post-conditions的库 。 (fluent 接口是通过使用的描述性的名称和方法链的可读性会最大化一个 API 设计样式)。下面是一个用CuttingEdge.Conditions的例子:
public ICollection GetData(Nullable<int> id, string xml, ICollection col)
{
// Check all preconditions:
Condition.Requires(id, "id")
.IsNotNull() // throws ArgumentNullException on failure
.IsInRange(1, 999) // ArgumentOutOfRangeException on failure
.IsNotEqualTo(128); // throws ArgumentException on failure
Condition.Requires(xml, "xml")
.StartsWith("<data>") // throws ArgumentException on failure
.EndsWith("</data>"); // throws ArgumentException on failure
Condition.Requires(col, "col")
.IsNotNull() // throws ArgumentNullException on failure
.IsEmpty(); // throws ArgumentException on failure
// Do some work
// Example: Call a method that should not return null
object result = BuildResults(xml, col);
// Check all postconditions:
Condition.Ensures(result, "result")
.IsOfType(typeof(ICollection)); // throws PostconditionException on failure
return (ICollection)result;
}
public static int[] Multiply(int[] left, int[] right)
{
Condition.Requires(left, "left").IsNotNull();
// You can add an optional description to each check
Condition.Requires(right, "right")
.IsNotNull()
.HasLength(left.Length, "left and right should have the same length");
// Do multiplication
}
每个验证程序的方法调用 — IsNotNull,IsNotEmpty等 ,如果不符合该条件将引发异常。 例如空路径是否 IsNotNull 方法调用将引发一个 ArgumentNullException。 然后,可以选择提供一个字符串,用作异常消息。
不过无法在使用验证程序类中使用,这时有两种方法来做:可以验证程序类上创建扩展方法,也可以使用哪些可用于指定布尔值或 lambda 表达式计算的评估方法。 如果该表达式返回 true,处理继续 ; 如果返回 false,则引发异常。
具体的使用方法参考作者的blog:.NET Junkie's blog - Introducing CuttingEdge.Conditions 和codepoject的文章http://www.codeproject.com/KB/library/conditions.aspx
- WebForms使用System.Web.Routing
- 学Java到底好不好,已学未学将要学,大家都快看过来
- 理解SynchronizationContext
- WPF 的Main方法
- WiX制作安装包--系统必备
- 选项卡TabHost
- FPGA入门
- .NET 4 System.Threading.Barrier 类
- 终被捕!5名罗马尼亚黑客因入侵华盛顿政府摄像头被捕
- VUE 入门基础(9)
- 国家级人工智能产业基地落户松江,发布上海首款国产人工智能芯片
- C# 4.0 Optional Parameters 和Named Parameters
- 开源Web服务器GoAhead远程代码执行漏洞 影响数十万物联网设备
- MySpace:开源数据处理Qizmt
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法