这是结果模式/操作结果模式吗? 或者一些不同的东西(如果是的话,什么?)
结果模式:据我所知,结果模式的目的是返回状态,而不是实质性数据/对象。 是这样吗?或者这个模式也可以返回实际数据吗?
图案...
问题:您的代码期望返回某种类型的对象,但您预计有时该对象不会返回,并且您会收到其他响应(例如错误或验证消息)。
解决方案:您在“结果”对象中返回所需的对象。 除了所需的“晴天”对象/结果之外,它还有另一个包含“雨天”结果的成员(例如字符串)。
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 等。
操作结果模式的目的是识别 函数合约失败的可能性
根据您的描述,我觉得您正在寻找结果类型。
该方法的主要思想不是抛出异常,而是创建一些具有 3 个字段的对象:
success
(bool)、value
、error
。并且始终填写 success
并根据方法执行的结果填写其他字段之一。
一般来说,从设计的角度来看这不是一种很好的方法,特别是如果您的工具允许您不在一个对象中混合不同的响应。
C#、Java 等编程语言明确引入了异常机制,可以让你分离并处理方法执行的不同结果。
REST 设计最佳实践还建议为不同的 HTTP 响应代码分离不同的响应对象。
该模式的支持者强调性能而非设计。但这样想:如果出现错误,速度只会变慢,但在现实生活中,与成功率相比,错误率可以忽略不计,从性能角度来看毫无意义。