当控制器收到错误输入时会发生什么?它应该将错误的输入传播到 UseCaseInteractor 吗?

What happens when the Controller gets bad input? Should it propagate the bad input to the UseCaseInteractor?

根据我在 Clean Architecture 中的理解,接口适配器层中的对象 适应 应用程序的核心到可能的不同基础设施。这样应用程序的核心就可以从不同的来源获取输入,例如 HTTP 请求和控制台命令。

通常,Controller 接受输入,Presenter 给出输出,因为控制器是一个适配器,可能需要将给定的输入转换为 [=接受的不同格式=12=]。在这种情况下,当 Controller 收到错误输入时会发生什么?它如何告诉客户端发生了错误,因为输出是由 Presenter 给出的?

编辑: 更好地思考,Controller不应该关心输入是否有效,它应该尝试总是转换输入,即使需要将无效输入转换为另一个输入无效。 UseCaseInteractor 应该 always return 一个有意义的响应,它不应该将异常传播给调用者。因此,当 Controller 收到错误输入时,它只是将错误输入发送到被调用的交互器,然后交互器可以正确处理错误输入(它是应用程序逻辑)并通过其呈现器呈现错误消息。对于控制器输入是输入,它的工作是适应最好,对吗?

您在“编辑”中得到了它。实际的输入验证应该发生在业务逻辑上,在用例交互器中。控制器执行“简单”数据转换。

示例:视图发送日期字符串。控制器尝试将其转换为 Date 对象。如果输入字符串不是有效的日期格式,控制器会将此信息传递给用例交互器,例如作为 null 或作为功能语言中的选项或作为任何其他类型,使用例交互者清楚输入日期无效。然后用例交互器决定如何处理这个输入。