编写纯 API 似乎带来了一些挑战。例如,我习惯于编写 winforms/asp.net 应用程序,如果我的输入无效,我可以通过编程方式打开一个对话框/网页。
但是,API 不知道可以从中执行它的 GUI 应用程序。如果我有一个名为 TakeString (String s) 的方法,并且字符串不能超过 5 个字母,如果是这样,我将如何将控制权返回给客户端?一个例外似乎有点矫枉过正?如果我在方法中返回某些内容,则简单的返回将不起作用。
谢谢
编写纯 API 似乎带来了一些挑战。例如,我习惯于编写 winforms/asp.net 应用程序,如果我的输入无效,我可以通过编程方式打开一个对话框/网页。
但是,API 不知道可以从中执行它的 GUI 应用程序。如果我有一个名为 TakeString (String s) 的方法,并且字符串不能超过 5 个字母,如果是这样,我将如何将控制权返回给客户端?一个例外似乎有点矫枉过正?如果我在方法中返回某些内容,则简单的返回将不起作用。
谢谢
例外是完全正确的做法。你记录了你只会接受一个不超过 5 个字母的字符串作为输入,ArgumentException
否则抛出。为什么会是矫枉过正?
在这种情况下,如果客户端无法检测到他们传递给您的内容的有效性,您甚至无需担心替代机制:如果调用代码对他们将传递给您的参数有任何疑问,他们自己检查它并不完全超出人类的智慧。
试图让 API 原谅无效输入是灾难的根源。在合理范围内尽可能严格地验证输入。如果您强迫客户表现良好,那么您以后遇到的问题就会少很多。
异常是处理此问题的最佳方法。
根据定义,如果用户提供了无效数据,这是一个例外。客户端应用程序需要负责处理异常并在必要时提示用户重新输入 。
你的 API(正如你已经指出的)应该不知道客户端应用程序,包括它是什么类型的应用程序,所以你的 API 所要做的就是说“嘿,那是无效的!” 并让客户端应用程序的开发人员弄清楚如何处理它。
举个简单的例子,如果您尝试以下 C# 代码行:
int myInt = Convert.ToInt32("SSDS");
.NET Framework 不会尝试重新提示用户。它只是抛出一个异常。