与方法返回的代码或异常的接口

时间:2012-11-06 10:03:19

标签: c# interface

我正在设计一个接口来传输文件并在某些远程服务器上操作它们。 令人困惑的是,接口上的方法是否应返回呼叫者的代码?假设的好处是调用者不必捕获异常。

或者正确的方法是返回空白并在失败条件下抛出异常???如果是这样,例外是否应该定制?或由语言定义的原始语言(在本例中为C#)??

 //Remote transfer interface 1
 enum codes { SUCCESS, FAIL, HOSTUNREACHABLE, so-on and so forth }
 codes init(String host, int port);
 codes transferFile(String filepath, String remotename);
 codes deleteRemote(String remotePath);

要转移的第二种类型

 //Remote transfer interface 2
 //Following methods throw exceptions when they occur, catched by caller..
 void init(String host, int port);
 void transferFile(String filepath, String remotename);
 void deleteRemote(String remotePath);

你们能说出哪种方式最好,为什么?

2 个答案:

答案 0 :(得分:0)

这里绝对没有最佳解决方案。一切都取决于您的API设计。 如果要创建压缩或“自包含”API,可以考虑在该接口的实现中处理IO异常

考虑一个事实,即你将不会在内部处理异常,并且希望调用者以某种方式处理它们。

这种类型的实现很好,因为它隐藏了实际上所有“东西”如何工作的深层细节,并通过标准化代码与调用者“对话”。

示例:您正在PLC控制器上为talking-ring编写通信层,并使用一些自定义专有协议。调用者可能会避免关心 协议如何工作(因此处理程序运行期间可能发生的预期和意外的可能异常),但只需调用函数并获取有关事实的信息,无论是成功还是失败。

答案 1 :(得分:0)

如果您在CLR上使用API​​,那么使用API​​的所有语言都能够处理异常,您应该使用它们。

错误处理之前的异常,检查返回代码可能很容易被忘记,并且当出现错误时,问题可能会在代码中稍后显示。而且你可能无法在不进行调试的情况下了解什么是错误的,并且在发生错误时恢复完全相同的前提条件。 使用Exceptions,您可以获得确切的错误信息,因为您忘记处理某些错误情况,并且当它发生时强制处理错误,而不是在程序流程中稍后处理错误 - 。