这是结果模式/操作结果模式,还是不同的东西(如果是,是什么?)

问题描述 投票:0回答:1

这是结果模式/操作结果模式吗? 或者一些不同的东西(如果是的话,什么?)

结果模式:据我所知,结果模式的目的是返回状态,而不是实质性数据/对象。 是这样吗?或者这个模式也可以返回实际数据吗?

图案...

问题:您的代码期望返回某种类型的对象,但您预计有时该对象不会返回,并且您会收到其他响应(例如错误或验证消息)。

解决方案:您在“结果”对象中返回所需的对象。 除了所需的“晴天”对象/结果之外,它还有另一个包含“雨天”结果的成员(例如字符串)。

public class AnimalResult
{
    public string StatusMessage = string.Empty;
    public MyCustomAnimalClass animalInformation = null;
}

public class MyApplication
{
    public static string HowHeavyIsaGiraffe()
    {
        AnimalResult giraffeResult = SomeService.GiraffeInfoService();

        if (giraffeResult.StatusMessage.Equals(string.Empty))
        {
            // Do something with the data/object.
            return "This Giraffe weighs: " + giraffeResult.animalInformation.WeightInKGs;
        }
        else
        {
            // Do something with the status message.
            return "We encountered an issue: " + giraffeResult.StatusMessage;
        }
    }
}

背景信息

如果您愿意,请随意对此发表评论,但这对我的问题来说并不重要。

当我过去使用这个(业余爱好项目)时,我倾向于为每个我想要返回的数据类型/类创建专用的 Result 对象,因为从来没有如此多的结果对象,这会成为维护问题。

我发现使用字符串作为“状态”是一种简单的方法,因为您基本上会得到

string.Empty = "ok to use object"
,否则如果
!string.Empty
那么您就知道存在问题。 您可以根据需要使其变得更复杂 - 例如显式声明异常信息成员(我从未这样做过)。

这是来自 Isaac Cummings 的https://medium.com/@cummingsi1993/the-operation-result-pattern-a-simple-guide-fe10ff959080但是这里的意图似乎是只得到“did这会正确执行”类型信息,而不是实际返回实质性值,如域对象、DTO 等。

操作结果模式的目的是识别 函数合约失败的可能性

design-patterns
1个回答
0
投票

根据您的描述,我觉得您正在寻找结果类型

该方法的主要思想不是抛出异常,而是创建一些具有 3 个字段的对象:

success
(bool)、
value
error
。并且始终填写
success
并根据方法执行的结果填写其他字段之一。


一般来说,从设计的角度来看这不是一种很好的方法,特别是如果您的工具允许您不在一个对象中混合不同的响应。

C#、Java 等编程语言明确引入了异常机制,可以让你分离并处理方法执行的不同结果。

REST 设计最佳实践还建议为不同的 HTTP 响应代码分离不同的响应对象。

该模式的支持者强调性能而非设计。但这样想:如果出现错误,速度只会变慢,但在现实生活中,与成功率相比,错误率可以忽略不计,从性能角度来看毫无意义

© www.soinside.com 2019 - 2024. All rights reserved.