2

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

或者正确的方法是返回 voids 并在失败条件下抛出异常???如果是这样,异常应该是自定义的吗?还是由语言定义的原始语言(在这种情况下为 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);

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

4

2 回答 2

0

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

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

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

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

于 2012-11-06T10:11:36.217 回答
0

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

错误处理之前的异常,检查返回码很容易被忘记,当错误发生时,问题可能会在代码的后面显示。如果不调试和恢复与错误发生时完全相同的前提条件,您可能无法知道什么时候出错了。使用异常,您可以得到准确的错误信息,以防您忘记处理某些错误情况,并且您强制在错误发生时而不是在程序流程的后期处理错误。

于 2012-11-06T10:20:03.080 回答