You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

该实现属于Result Pattern/Operation Result Pattern吗?该模式能否返回实际数据?

关于Result Pattern与Operation Result Pattern的疑问解答

一、你的实现模式归类

你当前实现的是带数据返回的Operation Result Pattern,也可以看作广义上的Result Pattern实用变体。

Isaac Cummings提到的“Operation Result Pattern仅识别失败可能性、不返回领域对象”是该模式的一种狭义定义,更偏向标记操作是否成功的极简场景;但在实际开发中,Operation Result Pattern的主流用法就是像你这样:既封装操作的状态(成功/失败),也在成功时返回目标数据,失败时返回错误信息——这也是该模式解决“操作可能成功返回数据、也可能失败返回错误”这类场景的核心价值。

二、关于Result Pattern的理解纠正

你之前的理解不正确:Result Pattern的设计意图并非只能返回状态,它的核心是统一封装操作的执行结果状态,同时携带该状态对应的附加信息——成功时附加业务数据,失败时附加错误/验证信息,这才是该模式被广泛使用的原因。

很多成熟的Result Pattern实现都会同时包含状态标识、错误信息和成功数据三个核心部分,用来替代传统的异常抛出/捕获,让操作的可能结果更清晰地体现在方法契约中。

三、对你实现的优化建议

当前用空字符串判断状态的方式存在类型不安全的问题,你可以做两个简单优化:

  • 用枚举替代空字符串作为状态标识,避免字符串判断的潜在bug
  • 将Result类改为泛型,无需为每种返回类型创建专用的Result类

优化后的示例代码:

public enum OperationStatus
{
    Success,
    Failure
}

public class Result<T>
{
    public OperationStatus Status { get; set; }
    public string ErrorMessage { get; set; } = string.Empty;
    public T Data { get; set; } = default;
}

public class MyApplication
{
    public static string HowHeavyIsaGiraffe()
    {
        Result<MyCustomAnimalClass> giraffeResult = SomeService.GiraffeInfoService();

        if (giraffeResult.Status == OperationStatus.Success)
        {
            return $"This Giraffe weighs: {giraffeResult.Data.WeightInKGs}";
        }
        else
        {
            return $"We encountered an issue: {giraffeResult.ErrorMessage}";
        }
    }
}

内容的提问来源于stack exchange,提问作者Adrian K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 15:54:54