exception - 我应该返回 null 还是抛出异常?

标签 exception return-value

我在这里发现了问题Should a retrieval method return 'null' or throw an exception when it can't produce the return value?Should functions return null or an empty object? ,但我认为我的情况很不同。

我正在编写一个由网络服务和客户端组成的应用程序。 Webservice负责访问数据,并将数据返回给客户端。我这样设计我的应用程序:

//网络服务

try
{
   DataTable data = GetSomeData(parameter);
   return data
}
catch (OopsException ex)
{
   //write some log here
   return null; 
}

//客户端:

   DataTable data = CallGetSomeData(parameter);
   if(data == null) 
   {
      MessageBox.Show("Oops Exception!");
      return;
   }

嗯,有一个不返回null的规则。我认为我不应该只是重新抛出异常并让客户端捕获 SoapException。您对此有何评论?有更好的方法来解决这个问题吗?

谢谢。

最佳答案

就您的情况而言,您的 Web 服务中已引发并以某种方式处理了异常。

返回 null 是一个好主意,因为客户端代码可以知道您的 Web 服务中出现了错误。

就客户而言,我认为你的方式很好。我认为没有理由抛出另一个异常(即使您不再使用 Web 服务)。

我这么说是因为,从技术上讲,没有任何事情会导致您的客户端代码出现错误。您刚刚从网络服务中获取了不良数据。这只是处理来自外部源的潜在错误输入的问题。

就我个人而言,根据经验,当我得到错误数据时,我会避免抛出异常,因为客户端代码无法控制这一点。

只需确保处理 data == null 条件时不会导致客户端代码崩溃。

关于exception - 我应该返回 null 还是抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3969997/

相关文章:

Java读取文件权限

ruby - 如何从救援内部救援异常

java - java中值重复时清理对象

c++ - 标准 C 函数 : Check for -1 or 0?

c - 在子进程中使用 "return"从子进程获取返回码的单线程方式

c# - 流套接字错误处理 winRT

c++ - 返回与使用引用参数

javascript - AJAX 仅加载和返回有限数量的对象

linux - list_entry 返回值

c# - 实现接口(interface)时是否需要处理已记录异常的引发