2011-01-18 35 views
0

编写纯API似乎带来了一些挑战。例如,我习惯于编写winforms/asp.net应用程序,如果输入的内容无效,我可以通过编程方式调出一个对话框/网页。如何将控制权返回给客户端应用程序,并再次从我的API请求输入?

但是,API并不知道它可能执行的GUI应用程序。如果我有一个名为TakeString(String s)将方法和字符串(S)不能超过5个字母,我将如何控制返回给客户端,如果它是这样的吗?一个异常看起来像矫枉过正?如果我在方法中返回某个内容,则简单返回将不起作用。

谢谢

+1

这听起来可能有点过分,但我会倾向于说这是预期的行为引发异常在这种情况下。无论事情看起来多么微不足道,原则都是可扩展的。 – 2011-01-18 21:11:24

回答

3

一个例外是完全应该做的事情。您记录您将只接受一个字符串作为输入,如果是5个字母或更少,并抛出ArgumentException否则。为什么会这样矫枉过正?

在这种情况下,如果客户端无法检测到它们传递给您的内容的有效性,那么您甚至不需要担心替代机制:如果调用代码对他们要发送的参数有任何疑问要通过你,它并不完全超出人类的智慧让他们自己去检查它。

试图让API对无效输入宽容是一种灾难。在合理范围内尽可能严格验证输入。如果您强制客户表现良好,那么您稍后会遇到更少的问题。

2

异常是处理这种情况的最佳方法。

根据定义,如果用户提供无效数据,这是一个例外。 客户端应用程序需要负责处理异常并在必要时提示用户重新输入。你的API(正如你已经指出的)应该对客户端应用程序一无所知,包括它是什么类型的应用程序,所以你的API所要做的就是说:“嘿,那是无效的!”并让客户端应用程序的开发人员弄清楚如何处理它。

举个简单的例子,如果你尝试的C#代码下面一行:

int myInt = Convert.ToInt32("SSDS"); 

.NET框架不会尝试向用户重新提示。它只是抛出一个异常。

+0

很好的例子。但我想在一个WinForms应用程序中,最好再问一次,而不是抛出一个异常(异常是昂贵的等)。 – dotnetdev 2011-01-18 21:15:46

相关问题