2

我正在努力使我的控制器变薄,完美的一次服务调用。所以我写下我的动作:

public function actionDoSomething($request, $arg1, $arg2)
{
    $result = $someService->doSomething($arg1, $arg2);

    if ($result === true)
        return 'Done';

    return 'Failed, but cannot say why';
}

现在我有我的疑问:

  1. 用户输入是否可以直接传递给服务,而不需要任何清理/过滤/验证?也许并不总是需要调用它(例如$arg1,预计是整数,但用户输入了 1.25)?

  2. 服务可能会做很多控制器不知道的工作。应该从服务返回什么类型?布尔值,整数,SomeResult 类,数组,混合?失败时应该返回什么数据?常量值,消息数组?我需要它来响应。我可以采用任何标准或最佳实践吗?

4

1 回答 1

0
  1. 您传递给服务层的数据格式应该由服务层本身驱动。您可以拥有多种 UI——HTML、REST、命令行——每一种都以不同的方式与用户交换数据。所有这些类型的控制器都必须解析用户数据并以它理解的格式将其传递给服务层,反之亦然——从服务层获取数据并根据 UI 的类型对其进行格式化。

    最终验证可以在服务层完成,以确保无效数据不会通过它,但如果这有助于您以更友好的方式向用户报告验证错误,您仍然可以从控制器调用验证服务。

  2. 服务层返回的数据类型取决于您调用的方法应该做什么。例如,数据保存方法可能不返回任何内容,而数据获取实体将以您需要或喜欢的格式返回数据。

    你不应该的是通过它返回的值来检查服务方法或任何其他方法的操作是否成功——PHP 异常就是为此。也就是说,假设一切顺利,除非抛出异常。

于 2013-09-10T18:19:14.493 回答