c# - 如何使用函数的错误列表返回结果

标签 c# design-patterns function functional-programming

我在尝试返回结合函数调用错误集的结果时遇到了困难。

我从以下方法开始

List<String> errors;
bool result = Obj.GetResult(out errors, int id);

第二步是引入新类

public class OperationResult
{
  public bool Result {get;set;}
  public List<string> Errors {get;set;}

}

但随后脏代码开始出现在 GetResult 方法中。

例如

public OperationResult GetResult(int id)
{
  if (id == 0)
  {
    return new OperationResult { Result = false, Errors = {"Error"}};
  }

  if (id < 400)
  {
    var result = new OperationResult { Result = false, Errors = {"Error"}};
    if (id >200)
       result.Errors.Add("Error");
    return result;
  }
}

然后我开始担心不允许结果用户编辑他们得到的结果。

我已经从只能读取数据的 OpearationResult 类中提取了接口(interface)。

现在我想添加结果生成器类...

在这一点上,我开始认为我做错了什么。尝试重新发明自行车,或者只是凭空制造问题。

请给我一个建议,如何处理所有这些东西。 我也很好奇这在函数式编程语言中是如何处理的。 (我的意思是不变性)

最佳答案

这可能是开始抛出异常的时候了。 在他的书中Clean Code , Robert Martin 谈到了当你做这样的事情时代码的困惑和缺乏可读性:

CustomResult result = myUser.CanLogOn();

因为从阅读代码中可以看出,CanLogOn 应该简单地返回一个 bool 值,指示用户是否被允许登录,但现在它得到一个包含错误代码等的自定义结果对象。这将导致您进一步污染您的用类似的东西编写代码

if(result.Result)
   LogOn();

代替

if(myUser.CanLogOn())
   LogOn();

甚至更好

myUser.LogOn() 

让它决定是否可以。

这是一个简化的示例,因为我假设除了数据库异常之外,CanLogOn() 方法中不会出现很多可能的错误。

虽然您不应该为正常流程使用异常,但它们的存在部分是为了防止这种输出值模式和返回错误代码,并且需要知道返回代码 200 和 402 之间的区别和-134。

这将使您的代码更清晰、更易于阅读,并且可能会提示您检查您是否真的需要所有这些异常,如果需要,此方法是否是抛出它们的最佳位置。

关于c# - 如何使用函数的错误列表返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5790100/

相关文章:

c# - 从脚本运行时创建数据库

c# - 将 C# 应用程序的引用添加到没有/clr 编译的 DLL?

ios - 存储日期组件而不是日期

ios - 全局函数和 AppDelegate 类的 performSelector 错误

c# - 对象创建后是否应该加载所有数据?

c# - 如何在 C# 中使用 CreateFile 打开目录以检查已删除的条目?

java - 软件架构中的容器和方法包——静态怎么样?

model-view-controller - Web 应用程序开发的 MVC 与 HMVC

javascript - 如何防止 "window.location.replace()"被覆盖?

arrays - 如何在 F# 中定义不同签名的函数数组