从函数

时间:2016-06-11 20:05:56

标签: language-agnostic

我有一个服务器接收我必须解析的请求,以便获取请求处理程序使用的参数。此外,解析和请求处理程序都可能以某种方式失败(例如:对于解析器,缺少参数;对于req。处理程序:数据库中的某些错误),因此" status"在下面的代码中。请求处理程序当然会提供某种响应,然后我必须将其发送回客户端。

因此我无法决定在我的" main"中使用以下哪个选项,因为我希望将解析器与处理程序分开:

1)

parser.parse(request,&param1, &param2, &status)

handler.handle(param1, param2, &response, &status)

2)

status = parser.parse(request, &param1, &param2)

status = handler.handle(param1, param2, &response)

3)

Params params = parser.parse(request, &status)

handler.handle(params, &response, &status)

4)

status = parser.parse(request, &params)

status = handler.handle(params, &response)

5)

parser.parse(request, &params, &status)

response = handler.handle(params, &status)

6)等,其他一些组合

(Params将是不同参数的某种容器,因此对于每种类型的请求,我会有不同的" Params"类型。此外,"&"可能意味着指针或引用,我使用的是c ++,但它与问题无关)

哪个最简单,更清晰,最好,......,无论如何?

***有很多类似的问题,但没有一个包括"状态"部分,所以我无法理解

1 个答案:

答案 0 :(得分:0)

这实际上不是语言无关的,因为它依赖于语言功能。例如,在Java中我会这样做:

try {
    Params params = parser.parse(request); // parser.parse will throw ParseException if something wrong
    Response response = handler.handle(params); // handler.handle will throw HandleException if something wrong
    // send response to the client (status 200)
} catch (ParseException e) {
    // Send parse error to the client (for example: status 400 with e.getMessage() as message)
} catch (HandleException e) {
    // Send handle error to the client (for example: status 500 with e.getMessage() as message)
}

所以status只是一个异常,如果状态不好,如果状态良好则没有异常。这可以是status字段的自定义异常,以获取更多详细信息。

如果编程语言不能使用异常,那么您可以使用传递值(&status)作为示例。但是没有通过结果,返回状态。返回结果。 parse的结果是解析参数,而不是状态。