用途
dotnet-result-pattern 用于在 .NET 项目中实现 Result 模式,以显式方式处理错误,而不是依赖异常。按照资料描述,其设计目标包括:业务错误不使用异常,异常仅保留给真正异常的情况;成功与失败都是显式的,编译器会强制处理两种分支;错误可组合,支持链式操作与快速失败;以及方法签名自文档化,能够展示可能的结果。
主要能力
核心类型包括三类:
- Result:用于没有返回值的操作,例如更新、删除。
- Result<T>:用于带返回值的操作,例如创建、查询。
- Error:表示错误信息,由 Code 与 Description 组成。此外还提供 ValidationResult 与 ValidationResult<TValue>,用于支持包含多个错误的验证结果,并通过 IValidationResult 标记接口定义 ValidationError。
Result 与 Result<T> 提供状态属性 IsSuccess、IsFailure 与 Error,以及工厂方法(Success、Failure、Create 等)。Result<T> 提供 Value 属性,在成功时返回值,失败时抛出异常,并支持从值或 Error 的隐式转换。Error 类型提供 None、NullValue 等预定义错误,并支持从异常创建错误。
ResultExtensions 提供函数式操作,包括:
- Map:在成功时转换值,失败时保留错误,含异步版本。
- Bind:在成功时链式调用另一个返回 Result 的操作,含多个异步版本。
- Tap:在成功时执行副作用但不改变结果,含异步版本。
- Match:根据结果状态执行成功或失败分支,含异步版本。
- Ensure:对已有结果追加校验,谓词为假时转为失败,含异步版本。
- Combine:合并多个结果,返回首个失败或成功;也支持带值的结果组合(两个、三个)。
- GetValueOrDefault:成功时返回值,失败时返回默认值或由工厂生成的值。
使用方式
资料给出实现结构建议,位于 /Domain/Abstractions/ 下,包含 Result.cs、Error.cs 与 ValidationResult.cs。模板代码展示了 Error 记录、Result 类、Result<TValue> 类、ResultExtensions 静态类以及 ValidationResult 的具体写法,均为可复制的 C# 代码。
使用示例涵盖:在领域实体中通过静态工厂方法(如 User.Create)返回 Result<User>,在更新方法中返回 Result;在命令处理器中返回 Result<Guid>,先检查实体是否存在,再调用工厂方法创建,最后保存并返回 Id;以及使用 Bind 进行链式调用,如依次执行获取用户、校验用户能否下单、创建订单、处理支付等步骤。
适用场景
适用于采用 .NET Clean Architecture 的项目,尤其是需要在领域层与命令处理层以显式、可预测方式表达成功与失败的业务流程,例如创建实体、更新名称、下订单等操作。也适合于希望通过链式组合组织多步操作并在失败时快速终止的场景。
限制
资料未提供该模式的性能影响、与特定框架版本的兼容性要求、安装命令或包管理方式,也未说明授权、收费或价格信息。上述内容暂未提供。